diff --git a/common/src/main/java/net/cmr/jurassicrevived/block/ModBlocks.java b/common/src/main/java/net/cmr/jurassicrevived/block/ModBlocks.java index 6629edb..850a5fc 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/block/ModBlocks.java +++ b/common/src/main/java/net/cmr/jurassicrevived/block/ModBlocks.java @@ -489,6 +489,9 @@ public class ModBlocks { public static final RegistrySupplier INCUBATED_BRACHIOSAURUS_EGG = registerBlock("incubated_brachiosaurus_egg", () -> new IncubatedEggBlock(BlockBehaviour.Properties.of().strength(4f).requiresCorrectToolForDrops(), ModEntities.BRACHIOSAURUS)); + public static final RegistrySupplier INCUBATED_CHICKENOSAURUS_EGG = registerBlock("incubated_chickenosaurus_egg", + () -> new IncubatedEggBlock(BlockBehaviour.Properties.of().strength(4f).requiresCorrectToolForDrops(), ModEntities.CHICKENOSAURUS)); + public static final RegistrySupplier INCUBATED_BARYONYX_EGG = registerBlock("incubated_baryonyx_egg", () -> new IncubatedEggBlock(BlockBehaviour.Properties.of().strength(4f).requiresCorrectToolForDrops(), ModEntities.BARYONYX)); @@ -501,6 +504,9 @@ public class ModBlocks { public static final RegistrySupplier INCUBATED_DEINONYCHUS_EGG = registerBlock("incubated_deinonychus_egg", () -> new IncubatedEggBlock(BlockBehaviour.Properties.of().strength(4f).requiresCorrectToolForDrops(), ModEntities.DEINONYCHUS)); + public static final RegistrySupplier INCUBATED_FDUCK_EGG = registerBlock("incubated_fduck_egg", + () -> new IncubatedEggBlock(BlockBehaviour.Properties.of().strength(4f).requiresCorrectToolForDrops(), ModEntities.FDUCK)); + public static final RegistrySupplier INCUBATED_EDMONTOSAURUS_EGG = registerBlock("incubated_edmontosaurus_egg", () -> new IncubatedEggBlock(BlockBehaviour.Properties.of().strength(4f).requiresCorrectToolForDrops(), ModEntities.EDMONTOSAURUS)); diff --git a/common/src/main/java/net/cmr/jurassicrevived/config/JRConfig.java b/common/src/main/java/net/cmr/jurassicrevived/config/JRConfig.java index 04d0005..71a3011 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/config/JRConfig.java +++ b/common/src/main/java/net/cmr/jurassicrevived/config/JRConfig.java @@ -13,6 +13,16 @@ public final class JRConfig { */ public boolean naturallySpawning = false; + /** + * Controls whether dinosaurs lose hunger over time. + */ + public boolean hungerConsumption = false; + + /** + * Controls whether dinosaurs lose thirst/water over time. + */ + public boolean waterConsumption = false; + /** * Energy pipe transfer rate in FE per second. */ diff --git a/common/src/main/java/net/cmr/jurassicrevived/config/JRConfigManager.java b/common/src/main/java/net/cmr/jurassicrevived/config/JRConfigManager.java index df74c75..7abe557 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/config/JRConfigManager.java +++ b/common/src/main/java/net/cmr/jurassicrevived/config/JRConfigManager.java @@ -32,6 +32,8 @@ public final class JRConfigManager { loaded.requirePower = readBoolean(text, "requirePower", loaded.requirePower); loaded.naturallySpawning = readBoolean(text, "naturallySpawning", loaded.naturallySpawning); + loaded.hungerConsumption = readBoolean(text, "hungerConsumption", loaded.hungerConsumption); + loaded.waterConsumption = readBoolean(text, "waterConsumption", loaded.waterConsumption); loaded.fePerSecond = readPositiveInt(text, "fePerSecond", loaded.fePerSecond); loaded.itemsPerSecond = readPositiveInt(text, "itemsPerSecond", loaded.itemsPerSecond); loaded.milliBucketsPerSecond = readPositiveInt(text, "milliBucketsPerSecond", loaded.milliBucketsPerSecond); @@ -51,6 +53,8 @@ public final class JRConfigManager { String text = "{\n" + " \"requirePower\": " + config.requirePower + ",\n" + " \"naturallySpawning\": " + config.naturallySpawning + ",\n" + + " \"hungerConsumption\": " + config.hungerConsumption + ",\n" + + " \"waterConsumption\": " + config.waterConsumption + ",\n" + " \"fePerSecond\": " + config.fePerSecond + ",\n" + " \"itemsPerSecond\": " + config.itemsPerSecond + ",\n" + " \"milliBucketsPerSecond\": " + config.milliBucketsPerSecond + "\n" + diff --git a/common/src/main/java/net/cmr/jurassicrevived/datagen/ModRecipeProvider.java b/common/src/main/java/net/cmr/jurassicrevived/datagen/ModRecipeProvider.java index bc996ca..daaa70c 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/datagen/ModRecipeProvider.java +++ b/common/src/main/java/net/cmr/jurassicrevived/datagen/ModRecipeProvider.java @@ -355,7 +355,7 @@ public class ModRecipeProvider { ModItems.GIGANOTOSAURUS_DNA.get()); helper.dnaHybridizing(ModItems.DISTORTUS_REX_DNA.get(), 1, ModItems.TYRANNOSAURUS_REX_DNA.get(), - ModItems.BRACHIOSAURUS_DNA.get(), + ModItems.TITANOSAURUS_DNA.get(), ModItems.VELOCIRAPTOR_DNA.get()); helper.dnaHybridizing(ModItems.INDORAPTOR_DNA.get(), 1, ModItems.INDOMINUS_REX_DNA.get(), diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/ai/DinoAIController.java b/common/src/main/java/net/cmr/jurassicrevived/entity/ai/DinoAIController.java index 54bb18e..ca5ffca 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/ai/DinoAIController.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/ai/DinoAIController.java @@ -1,5 +1,7 @@ package net.cmr.jurassicrevived.entity.ai; +import net.cmr.jurassicrevived.config.JRConfig; +import net.cmr.jurassicrevived.config.JRConfigManager; import net.minecraft.core.BlockPos; import net.minecraft.tags.FluidTags; import net.minecraft.world.InteractionHand; @@ -22,6 +24,9 @@ import java.util.List; public class DinoAIController { + private static final float VITAL_DECAY_MULTIPLIER = 0.05f; + private static final double TERRITORIAL_ROAM_SPEED_MULTIPLIER = 2.0D; + private final DinoEntityBase dino; private State currentState = State.IDLE; @@ -131,8 +136,10 @@ public class DinoAIController { // 2. Vitals Update if (dino.dinoData != null) { - float hungerDecay = config.hungerDecay(); - float thirstDecay = config.thirstDecay(); + JRConfig jrConfig = JRConfigManager.get(); + + float hungerDecay = jrConfig.hungerConsumption ? config.hungerDecay() * VITAL_DECAY_MULTIPLIER : 0.0f; + float thirstDecay = jrConfig.waterConsumption ? config.thirstDecay() * VITAL_DECAY_MULTIPLIER : 0.0f; if (currentState == State.SLEEPING) { hungerDecay *= 0.5f; @@ -142,9 +149,14 @@ public class DinoAIController { } } - dino.dinoData.modifyHunger(-hungerDecay); - float currentThirst = dino.dinoData.getThirst(); - dino.dinoData.setThirst(Math.max(0, currentThirst - thirstDecay)); + if (hungerDecay > 0.0f) { + dino.dinoData.modifyHunger(-hungerDecay); + } + + if (thirstDecay > 0.0f) { + float currentThirst = dino.dinoData.getThirst(); + dino.dinoData.setThirst(Math.max(0, currentThirst - thirstDecay)); + } float hunger = dino.dinoData.getHunger(); float thirst = dino.dinoData.getThirst(); @@ -155,7 +167,6 @@ public class DinoAIController { } if (stateTimer % 20 == 0) { - dino.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 40, 1)); if (hunger <= 0) { dino.hurt(dino.damageSources().starve(), 1.0f); dino.dinoData.addCondition(IDinoData.Condition.STARVING); @@ -230,13 +241,19 @@ public class DinoAIController { // 5. Hunt check if ((currentState == State.IDLE || currentState == State.ROAMING || currentState == State.TERRITORIAL_ROAMING) && dino.isCarnivore()) { - boolean hungry = dino.dinoData != null && dino.dinoData.getHunger() < 70; + boolean hungerConsumptionEnabled = JRConfigManager.get().hungerConsumption; boolean territorial = dino.dinoData != null && dino.dinoData.getAggression() == IDinoData.Aggression.TERRITORIAL; + boolean shouldHunt; - if (hungry || (territorial && dino.dinoData.getHunger() < 90)) { - if (stateTimer % 10 == 0) { - findTarget(); - } + if (hungerConsumptionEnabled) { + boolean hungry = dino.dinoData != null && dino.dinoData.getHunger() < 70; + shouldHunt = hungry || (territorial && dino.dinoData != null && dino.dinoData.getHunger() < 90); + } else { + shouldHunt = stateTimer % 100 == 0 && dino.getRandom().nextFloat() < (territorial ? 0.35f : 0.15f); + } + + if (shouldHunt && stateTimer % 10 == 0) { + findTarget(); } } @@ -628,7 +645,12 @@ public class DinoAIController { boolean resumed = false; if (roamTarget != null) { - resumed = dino.getNavigation().moveTo(roamTarget.x, roamTarget.y, roamTarget.z, dino.getAIConfig().walkSpeed()); + resumed = dino.getNavigation().moveTo( + roamTarget.x, + roamTarget.y, + roamTarget.z, + getTerritorialRoamSpeed() + ); } if (!resumed) { @@ -640,6 +662,10 @@ public class DinoAIController { } } + private double getTerritorialRoamSpeed() { + return dino.getAIConfig().walkSpeed() * TERRITORIAL_ROAM_SPEED_MULTIPLIER; + } + private void findAndSetTerritorialTarget() { this.roamTarget = null; Vec3 target = null; @@ -655,7 +681,7 @@ public class DinoAIController { } if (candidate != null && dino.distanceToSqr(candidate) > 25.0) { - if (dino.getNavigation().moveTo(candidate.x, candidate.y, candidate.z, dino.getAIConfig().walkSpeed())) { + if (dino.getNavigation().moveTo(candidate.x, candidate.y, candidate.z, getTerritorialRoamSpeed())) { this.roamTarget = candidate; return; } @@ -664,7 +690,7 @@ public class DinoAIController { Vec3 fallback = DefaultRandomPos.getPos(dino, 10, 5); if (fallback != null) { - if (dino.getNavigation().moveTo(fallback.x, fallback.y, fallback.z, dino.getAIConfig().walkSpeed())) { + if (dino.getNavigation().moveTo(fallback.x, fallback.y, fallback.z, getTerritorialRoamSpeed())) { this.roamTarget = fallback; } } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/ai/DinoData.java b/common/src/main/java/net/cmr/jurassicrevived/entity/ai/DinoData.java new file mode 100644 index 0000000..e27f965 --- /dev/null +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/ai/DinoData.java @@ -0,0 +1,291 @@ +package net.cmr.jurassicrevived.entity.ai; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.network.syncher.SynchedEntityData; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +public class DinoData implements IDinoData { + + private final float maxHunger; + private final float maxThirst; + + private float hunger; + private float thirst; + + private Mood mood; + private Aggression aggression; + private float territoriality; + + private DietaryClassification diet; + private Type type; + private Group group; + private BirthType birthType; + private ActivityPattern activityPattern; + + private final Set conditions = EnumSet.noneOf(Condition.class); + private final List whitelistedPlayers = new ArrayList<>(); + + public DinoData( + float maxHunger, + float maxThirst, + Mood mood, + Aggression aggression, + float territoriality, + DietaryClassification diet, + Type type, + Group group, + BirthType birthType, + ActivityPattern activityPattern + ) { + this.maxHunger = maxHunger; + this.maxThirst = maxThirst; + this.hunger = maxHunger; + this.thirst = maxThirst; + this.mood = mood; + this.aggression = aggression; + this.territoriality = territoriality; + this.diet = diet; + this.type = type; + this.group = group; + this.birthType = birthType; + this.activityPattern = activityPattern; + } + + @Override + public float getHunger() { + return hunger; + } + + @Override + public void setHunger(float value) { + this.hunger = clamp(value, 0.0f, maxHunger); + } + + @Override + public void modifyHunger(float change) { + setHunger(this.hunger + change); + } + + @Override + public float getThirst() { + return thirst; + } + + @Override + public void setThirst(float value) { + this.thirst = clamp(value, 0.0f, maxThirst); + } + + @Override + public Mood getMood() { + return mood; + } + + @Override + public void setMood(Mood mood) { + this.mood = mood; + } + + @Override + public Aggression getAggression() { + return aggression; + } + + @Override + public void setAggression(Aggression aggression) { + this.aggression = aggression; + } + + @Override + public float getTerritoriality() { + return territoriality; + } + + @Override + public void setTerritoriality(float value) { + this.territoriality = clamp(value, 0.0f, 1.0f); + } + + @Override + public DietaryClassification getDiet() { + return diet; + } + + @Override + public void setDiet(DietaryClassification diet) { + this.diet = diet; + } + + @Override + public Type getType() { + return type; + } + + @Override + public void setType(Type type) { + this.type = type; + } + + @Override + public Group getGroup() { + return group; + } + + @Override + public void setGroup(Group group) { + this.group = group; + } + + @Override + public BirthType getBirthType() { + return birthType; + } + + @Override + public void setBirthType(BirthType birthType) { + this.birthType = birthType; + } + + @Override + public ActivityPattern getActivityPattern() { + return activityPattern; + } + + @Override + public void setActivityPattern(ActivityPattern pattern) { + this.activityPattern = pattern; + } + + @Override + public Set getConditions() { + return conditions; + } + + @Override + public void addCondition(Condition condition) { + this.conditions.add(condition); + } + + @Override + public void removeCondition(Condition condition) { + this.conditions.remove(condition); + } + + @Override + public boolean hasCondition(Condition condition) { + return this.conditions.contains(condition); + } + + @Override + public void addWhitelistedPlayer(UUID playerUUID) { + if (!this.whitelistedPlayers.contains(playerUUID)) { + this.whitelistedPlayers.add(playerUUID); + } + } + + @Override + public boolean isWhitelisted(UUID playerUUID) { + return this.whitelistedPlayers.contains(playerUUID); + } + + @Override + public List getWhitelistedPlayers() { + return this.whitelistedPlayers; + } + + @Override + public void saveNBT(CompoundTag tag) { + CompoundTag dinoTag = new CompoundTag(); + + dinoTag.putFloat("Hunger", this.hunger); + dinoTag.putFloat("Thirst", this.thirst); + dinoTag.putString("Mood", this.mood.name()); + dinoTag.putString("Aggression", this.aggression.name()); + dinoTag.putFloat("Territoriality", this.territoriality); + dinoTag.putString("Diet", this.diet.name()); + dinoTag.putString("Type", this.type.name()); + dinoTag.putString("Group", this.group.name()); + dinoTag.putString("BirthType", this.birthType.name()); + dinoTag.putString("ActivityPattern", this.activityPattern.name()); + + int[] conditionIds = this.conditions.stream() + .mapToInt(Enum::ordinal) + .toArray(); + dinoTag.putIntArray("Conditions", conditionIds); + + ListTag whitelistTag = new ListTag(); + for (UUID uuid : this.whitelistedPlayers) { + CompoundTag uuidTag = new CompoundTag(); + uuidTag.putUUID("UUID", uuid); + whitelistTag.add(uuidTag); + } + dinoTag.put("WhitelistedPlayers", whitelistTag); + + tag.put("DinoData", dinoTag); + } + + @Override + public void loadNBT(CompoundTag tag) { + if (!tag.contains("DinoData")) { + return; + } + + CompoundTag dinoTag = tag.getCompound("DinoData"); + + this.hunger = clamp(dinoTag.getFloat("Hunger"), 0.0f, maxHunger); + this.thirst = clamp(dinoTag.getFloat("Thirst"), 0.0f, maxThirst); + this.mood = readEnum(dinoTag, "Mood", Mood.class, this.mood); + this.aggression = readEnum(dinoTag, "Aggression", Aggression.class, this.aggression); + this.territoriality = clamp(dinoTag.getFloat("Territoriality"), 0.0f, 1.0f); + this.diet = readEnum(dinoTag, "Diet", DietaryClassification.class, this.diet); + this.type = readEnum(dinoTag, "Type", Type.class, this.type); + this.group = readEnum(dinoTag, "Group", Group.class, this.group); + this.birthType = readEnum(dinoTag, "BirthType", BirthType.class, this.birthType); + this.activityPattern = readEnum(dinoTag, "ActivityPattern", ActivityPattern.class, this.activityPattern); + + this.conditions.clear(); + int[] conditionIds = dinoTag.getIntArray("Conditions"); + Condition[] conditionValues = Condition.values(); + for (int conditionId : conditionIds) { + if (conditionId >= 0 && conditionId < conditionValues.length) { + this.conditions.add(conditionValues[conditionId]); + } + } + + this.whitelistedPlayers.clear(); + ListTag whitelistTag = dinoTag.getList("WhitelistedPlayers", 10); + for (int i = 0; i < whitelistTag.size(); i++) { + CompoundTag uuidTag = whitelistTag.getCompound(i); + if (uuidTag.hasUUID("UUID")) { + this.whitelistedPlayers.add(uuidTag.getUUID("UUID")); + } + } + } + + @Override + public void tickSync(SynchedEntityData entityData) { + // No-op for now. Add EntityDataAccessors later if you want client-side GUI/model access. + } + + private static float clamp(float value, float min, float max) { + return Math.max(min, Math.min(max, value)); + } + + private static > E readEnum(CompoundTag tag, String key, Class enumClass, E fallback) { + if (!tag.contains(key)) { + return fallback; + } + + try { + return Enum.valueOf(enumClass, tag.getString(key)); + } catch (IllegalArgumentException ignored) { + return fallback; + } + } +} diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/AlbertosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/AlbertosaurusRenderer.java index 9634b31..a2ce820 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/AlbertosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/AlbertosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class AlbertosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.5F; + private final float animalScale = 1.7F; public AlbertosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new AlbertosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/AllosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/AllosaurusRenderer.java index eb2106f..64d4ef8 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/AllosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/AllosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class AllosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.65F; + private final float animalScale = 1.9F; public AllosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new AllosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/AlvarezsaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/AlvarezsaurusRenderer.java index ba129a8..cd35a32 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/AlvarezsaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/AlvarezsaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class AlvarezsaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 0.5F; + private final float animalScale = 0.8F; public AlvarezsaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new AlvarezsaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ApatosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ApatosaurusRenderer.java index 3ec0fb5..0516cd7 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ApatosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ApatosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class ApatosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.75F; + private final float animalScale = 1.9F; public ApatosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new ApatosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ArambourgianiaRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ArambourgianiaRenderer.java index bf79792..79939bb 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ArambourgianiaRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ArambourgianiaRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class ArambourgianiaRenderer extends GeoEntityRenderer { - private final float animalScale = 1.75F; + private final float animalScale = 1.9F; public ArambourgianiaRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new ArambourgianiaModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/BaryonyxRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/BaryonyxRenderer.java index 9c0b6c7..5c70a01 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/BaryonyxRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/BaryonyxRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class BaryonyxRenderer extends GeoEntityRenderer { - private final float animalScale = 1.5F; + private final float animalScale = 1.3F; public BaryonyxRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new BaryonyxModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/BrachiosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/BrachiosaurusRenderer.java index a600ed0..635296c 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/BrachiosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/BrachiosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class BrachiosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.6F; + private final float animalScale = 2.0F; public BrachiosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new BrachiosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/CarcharodontosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/CarcharodontosaurusRenderer.java index e5f4db1..2450fd3 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/CarcharodontosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/CarcharodontosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class CarcharodontosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 2.25F; + private final float animalScale = 2.0F; public CarcharodontosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new CarcharodontosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/CearadactylusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/CearadactylusRenderer.java index ccd7cfd..1f40e5f 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/CearadactylusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/CearadactylusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class CearadactylusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 0.9F; public CearadactylusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new CearadactylusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/CeratosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/CeratosaurusRenderer.java index 322e01e..68614a5 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/CeratosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/CeratosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class CeratosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.75F; + private final float animalScale = 2.1F; public CeratosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new CeratosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ChasmosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ChasmosaurusRenderer.java index a330934..ab6069b 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ChasmosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ChasmosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class ChasmosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.25F; + private final float animalScale = 1.3F; public ChasmosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new ChasmosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ChickenosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ChickenosaurusRenderer.java index 4d997da..42599b1 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ChickenosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ChickenosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class ChickenosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 0.9F; public ChickenosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new ChickenosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/CoelophysisRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/CoelophysisRenderer.java index 6fe0dbf..8458714 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/CoelophysisRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/CoelophysisRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class CoelophysisRenderer extends GeoEntityRenderer { - private final float animalScale = 0.9F; + private final float animalScale = 0.7F; public CoelophysisRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new CoelophysisModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/CompsognathusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/CompsognathusRenderer.java index 212eb28..0cbd14d 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/CompsognathusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/CompsognathusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class CompsognathusRenderer extends GeoEntityRenderer { - private final float animalScale = 0.35F; + private final float animalScale = 0.2F; public CompsognathusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new CompsognathusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ConcavenatorRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ConcavenatorRenderer.java index 5b093af..99b73a8 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ConcavenatorRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ConcavenatorRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class ConcavenatorRenderer extends GeoEntityRenderer { - private final float animalScale = 1.2F; + private final float animalScale = 0.9F; public ConcavenatorRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new ConcavenatorModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/CorythosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/CorythosaurusRenderer.java index f40427f..c6cd69d 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/CorythosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/CorythosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class CorythosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.25F; + private final float animalScale = 1.7F; public CorythosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new CorythosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/DeinonychusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/DeinonychusRenderer.java index 417476b..68fe9a5 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/DeinonychusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/DeinonychusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class DeinonychusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 0.9F; public DeinonychusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new DeinonychusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/DilophosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/DilophosaurusRenderer.java index 9c8c806..ed6bd97 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/DilophosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/DilophosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class DilophosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 1.2F; public DilophosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new DilophosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/DimorphodonRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/DimorphodonRenderer.java index c668fe9..dfa3305 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/DimorphodonRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/DimorphodonRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class DimorphodonRenderer extends GeoEntityRenderer { - private final float animalScale = 0.4F; + private final float animalScale = 0.7F; public DimorphodonRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new DimorphodonModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/DiplodocusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/DiplodocusRenderer.java index 2ad3865..6006d5f 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/DiplodocusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/DiplodocusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class DiplodocusRenderer extends GeoEntityRenderer { - private final float animalScale = 2.5F; + private final float animalScale = 2.8F; public DiplodocusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new DiplodocusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/DistortusRexRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/DistortusRexRenderer.java index 468a6ed..3f9161b 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/DistortusRexRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/DistortusRexRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class DistortusRexRenderer extends GeoEntityRenderer { - private final float animalScale = 2.75F; + private final float animalScale = 3.4F; public DistortusRexRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new DistortusRexModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/DryosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/DryosaurusRenderer.java index ec680f7..9216297 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/DryosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/DryosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class DryosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 0.35F; + private final float animalScale = 0.45F; public DryosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new DryosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/EdmontosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/EdmontosaurusRenderer.java index 2328097..e1a6b15 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/EdmontosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/EdmontosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class EdmontosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.5F; + private final float animalScale = 2.0F; public EdmontosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new EdmontosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/FDuckRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/FDuckRenderer.java index 9ce48b7..b60b857 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/FDuckRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/FDuckRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class FDuckRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 1.4F; public FDuckRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new FDuckModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/GallimimusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/GallimimusRenderer.java index 341f7e9..c4fe541 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/GallimimusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/GallimimusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class GallimimusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 0.8F; public GallimimusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new GallimimusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/GeosternbergiaRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/GeosternbergiaRenderer.java index 384ec2a..1d4a250 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/GeosternbergiaRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/GeosternbergiaRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class GeosternbergiaRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 1.4F; public GeosternbergiaRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new GeosternbergiaModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/GiganotosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/GiganotosaurusRenderer.java index 5a003f2..23e5601 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/GiganotosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/GiganotosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class GiganotosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 2.1F; + private final float animalScale = 2.2F; public GiganotosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new GiganotosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/GuanlongRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/GuanlongRenderer.java index 0eea2af..9cecb7b 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/GuanlongRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/GuanlongRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class GuanlongRenderer extends GeoEntityRenderer { - private final float animalScale = 0.75F; + private final float animalScale = 0.6F; public GuanlongRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new GuanlongModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/GuidracoRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/GuidracoRenderer.java index a473e10..317e892 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/GuidracoRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/GuidracoRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class GuidracoRenderer extends GeoEntityRenderer { - private final float animalScale = 0.55F; + private final float animalScale = 0.8F; public GuidracoRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new GuidracoModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/HadrosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/HadrosaurusRenderer.java index e42d1ce..580abcd 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/HadrosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/HadrosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class HadrosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.4F; + private final float animalScale = 1.5F; public HadrosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new HadrosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/HerrerasaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/HerrerasaurusRenderer.java index 3094d53..7ec746c 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/HerrerasaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/HerrerasaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class HerrerasaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.095F; + private final float animalScale = 1.3F; public HerrerasaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new HerrerasaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/HypsilophodonRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/HypsilophodonRenderer.java index d2d0f68..45e0d5a 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/HypsilophodonRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/HypsilophodonRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class HypsilophodonRenderer extends GeoEntityRenderer { - private final float animalScale = 0.6F; + private final float animalScale = 0.5F; public HypsilophodonRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new HypsilophodonModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/IndominusRexRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/IndominusRexRenderer.java index 28e2a24..0b4f3db 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/IndominusRexRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/IndominusRexRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class IndominusRexRenderer extends GeoEntityRenderer { - private final float animalScale = 2.77F; + private final float animalScale = 3.0F; public IndominusRexRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new IndominusRexModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/IndoraptorRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/IndoraptorRenderer.java index 8663cff..92aeaa5 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/IndoraptorRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/IndoraptorRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class IndoraptorRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 1.8F; public IndoraptorRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new IndoraptorModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/InostranceviaRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/InostranceviaRenderer.java index 3d9837a..6b24848 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/InostranceviaRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/InostranceviaRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class InostranceviaRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 1.1F; public InostranceviaRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new InostranceviaModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/LambeosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/LambeosaurusRenderer.java index 3ef3fb9..d69b200 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/LambeosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/LambeosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class LambeosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.65F; + private final float animalScale = 1.8F; public LambeosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new LambeosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/LudodactylusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/LudodactylusRenderer.java index 18e6c74..fce9995 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/LudodactylusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/LudodactylusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class LudodactylusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 0.9F; public LudodactylusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new LudodactylusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/MajungasaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/MajungasaurusRenderer.java index 6c83b32..6ee34f7 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/MajungasaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/MajungasaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class MajungasaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.57F; + private final float animalScale = 1.4F; public MajungasaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new MajungasaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/MamenchisaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/MamenchisaurusRenderer.java index 526b4a3..1a15817 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/MamenchisaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/MamenchisaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class MamenchisaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.85F; + private final float animalScale = 1.7F; public MamenchisaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new MamenchisaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/MetriacanthosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/MetriacanthosaurusRenderer.java index a4bd5c0..a5a3926 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/MetriacanthosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/MetriacanthosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class MetriacanthosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.75F; + private final float animalScale = 1.5F; public MetriacanthosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new MetriacanthosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/MoganopterusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/MoganopterusRenderer.java index c622d4a..95d79c8 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/MoganopterusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/MoganopterusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class MoganopterusRenderer extends GeoEntityRenderer { - private final float animalScale = 0.75F; + private final float animalScale = 0.8F; public MoganopterusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new MoganopterusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/NyctosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/NyctosaurusRenderer.java index f6c26cb..db81d30 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/NyctosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/NyctosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class NyctosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 0.45F; + private final float animalScale = 0.3F; public NyctosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new NyctosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/OrnitholestesRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/OrnitholestesRenderer.java index c349e66..1a84e1e 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/OrnitholestesRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/OrnitholestesRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class OrnitholestesRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 0.6F; public OrnitholestesRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new OrnitholestesModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/OrnithomimusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/OrnithomimusRenderer.java index 17480eb..1a16fa1 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/OrnithomimusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/OrnithomimusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class OrnithomimusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 0.8F; public OrnithomimusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new OrnithomimusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/OuranosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/OuranosaurusRenderer.java index 2557a26..eef76b8 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/OuranosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/OuranosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class OuranosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 1.2F; public OuranosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new OuranosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/PachycephalosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/PachycephalosaurusRenderer.java index bd9b507..8f683d9 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/PachycephalosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/PachycephalosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class PachycephalosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 0.8F; public PachycephalosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new PachycephalosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ParasaurolophusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ParasaurolophusRenderer.java index b469df6..1e67593 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ParasaurolophusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ParasaurolophusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class ParasaurolophusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.5F; + private final float animalScale = 1.7F; public ParasaurolophusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new ParasaurolophusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ProceratosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ProceratosaurusRenderer.java index 467c252..41f34cb 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ProceratosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ProceratosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class ProceratosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 0.65F; + private final float animalScale = 0.6F; public ProceratosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new ProceratosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ProcompsognathusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ProcompsognathusRenderer.java index 7ae3b0e..6e949d3 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ProcompsognathusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ProcompsognathusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class ProcompsognathusRenderer extends GeoEntityRenderer { - private final float animalScale = 0.44F; + private final float animalScale = 0.2F; public ProcompsognathusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new ProcompsognathusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ProtoceratopsRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ProtoceratopsRenderer.java index e1eeef3..58c70e6 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ProtoceratopsRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ProtoceratopsRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class ProtoceratopsRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 1.2F; public ProtoceratopsRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new ProtoceratopsModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/PteranodonRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/PteranodonRenderer.java index 14eefcb..e482136 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/PteranodonRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/PteranodonRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class PteranodonRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 1.5F; public PteranodonRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new PteranodonModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/PterodaustroRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/PterodaustroRenderer.java index 83875f3..b7048ec 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/PterodaustroRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/PterodaustroRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class PterodaustroRenderer extends GeoEntityRenderer { - private final float animalScale = 0.65F; + private final float animalScale = 0.7F; public PterodaustroRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new PterodaustroModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/RajasaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/RajasaurusRenderer.java index 1452784..8c08a95 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/RajasaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/RajasaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class RajasaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.45F; + private final float animalScale = 1.5F; public RajasaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new RajasaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/RugopsRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/RugopsRenderer.java index 7441d56..cc92bb7 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/RugopsRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/RugopsRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class RugopsRenderer extends GeoEntityRenderer { - private final float animalScale = 1.2F; + private final float animalScale = 0.9F; public RugopsRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new RugopsModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/SegisaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/SegisaurusRenderer.java index be71eb4..9515d15 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/SegisaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/SegisaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class SegisaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 0.55F; + private final float animalScale = 0.62F; public SegisaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new SegisaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ShantungosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ShantungosaurusRenderer.java index b7a1440..b17f2cb 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ShantungosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ShantungosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class ShantungosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.67F; + private final float animalScale = 1.8F; public ShantungosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new ShantungosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/SpinosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/SpinosaurusRenderer.java index a5542df..1dd7013 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/SpinosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/SpinosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class SpinosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 2.77F; + private final float animalScale = 2.2F; public SpinosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new SpinosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/StegosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/StegosaurusRenderer.java index daa5077..3b4af04 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/StegosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/StegosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class StegosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.62F; + private final float animalScale = 1.4F; public StegosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new StegosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/StyracosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/StyracosaurusRenderer.java index 0ba9d66..ff0cf36 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/StyracosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/StyracosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class StyracosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.28F; + private final float animalScale = 0.7F; public StyracosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new StyracosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/TapejaraRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/TapejaraRenderer.java index 878fd15..b86b50b 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/TapejaraRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/TapejaraRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class TapejaraRenderer extends GeoEntityRenderer { - private final float animalScale = 0.45F; + private final float animalScale = 0.6F; public TapejaraRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new TapejaraModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/TherizinosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/TherizinosaurusRenderer.java index 88ec90b..bbca7f9 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/TherizinosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/TherizinosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class TherizinosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 2.5F; + private final float animalScale = 1.9F; public TherizinosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new TherizinosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/TitanosaurusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/TitanosaurusRenderer.java index d68aad0..1495129 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/TitanosaurusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/TitanosaurusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class TitanosaurusRenderer extends GeoEntityRenderer { - private final float animalScale = 2.1F; + private final float animalScale = 2.3F; public TitanosaurusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new TitanosaurusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/TroodonRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/TroodonRenderer.java index b2fca3d..3d09201 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/TroodonRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/TroodonRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class TroodonRenderer extends GeoEntityRenderer { - private final float animalScale = 0.5F; + private final float animalScale = 0.3F; public TroodonRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new TroodonModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/TropeognathusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/TropeognathusRenderer.java index 198c196..f2c1c5e 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/TropeognathusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/TropeognathusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class TropeognathusRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 1.4F; public TropeognathusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new TropeognathusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/TupuxuaraRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/TupuxuaraRenderer.java index 4cbd84c..1e31bda 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/TupuxuaraRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/TupuxuaraRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class TupuxuaraRenderer extends GeoEntityRenderer { - private final float animalScale = 0.8F; + private final float animalScale = 1.0F; public TupuxuaraRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new TupuxuaraModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/UtahraptorRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/UtahraptorRenderer.java index 530242d..b25a097 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/UtahraptorRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/UtahraptorRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class UtahraptorRenderer extends GeoEntityRenderer { - private final float animalScale = 1.0F; + private final float animalScale = 0.9F; public UtahraptorRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new UtahraptorModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ZhenyuanopterusRenderer.java b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ZhenyuanopterusRenderer.java index cd48d7b..bb12bbf 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/client/ZhenyuanopterusRenderer.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/client/ZhenyuanopterusRenderer.java @@ -9,7 +9,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class ZhenyuanopterusRenderer extends GeoEntityRenderer { - private final float animalScale = 0.7F; + private final float animalScale = 1.1F; public ZhenyuanopterusRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new ZhenyuanopterusModel()); } diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AlbertosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AlbertosaurusEntity.java index 8068634..a7efd84 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AlbertosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AlbertosaurusEntity.java @@ -1,8 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; -import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; -import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; import net.cmr.jurassicrevived.sound.ModSounds; import net.minecraft.Util; @@ -12,25 +14,19 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; -import net.minecraft.sounds.SoundEvents; import net.minecraft.util.Mth; -import net.minecraft.world.Difficulty; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.*; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.attributes.DefaultAttributes; -import net.minecraft.world.entity.ai.goal.*; -import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; -import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; import net.minecraft.world.entity.animal.Animal; -import net.minecraft.world.entity.monster.Monster; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -47,7 +43,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class AlbertosaurusEntity extends Animal implements GeoEntity { +public class AlbertosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -62,38 +58,44 @@ public class AlbertosaurusEntity extends Animal implements GeoEntity { public AlbertosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return AlbertosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1.2, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(9, new FollowMobGoal(this, 1.2, (float) 20, (float) 10)); - this.targetSelector.addGoal(10, new NearestAttackableTargetGoal<>(this, Monster.class, true)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, SpinosaurusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, IndominusRexEntity.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_ALBERTOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -107,11 +109,6 @@ public class AlbertosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 16D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } - @Nullable @Override public AgeableMob getBreedOffspring(ServerLevel pLevel, AgeableMob pOtherParent) { @@ -137,17 +134,17 @@ public class AlbertosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(AlbertosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.albertosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.albertosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.albertosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.albertosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.albertosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -316,4 +313,9 @@ public class AlbertosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.ALBERTOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.ALBERTOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AllosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AllosaurusEntity.java index e624e7b..a0d967b 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AllosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AllosaurusEntity.java @@ -1,8 +1,8 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; -import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; -import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; +import net.cmr.jurassicrevived.entity.ai.*; import net.cmr.jurassicrevived.entity.client.AllosaurusVariant; import net.cmr.jurassicrevived.entity.client.AllosaurusVariant; import net.cmr.jurassicrevived.sound.ModSounds; @@ -29,6 +29,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +46,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class AllosaurusEntity extends Animal implements GeoEntity { +public class AllosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,39 +61,44 @@ public class AllosaurusEntity extends Animal implements GeoEntity { public AllosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } - @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return AllosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.targetSelector.addGoal(9, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(10, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, TyrannosaurusRexEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, IndominusRexEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(19, new RandomLookAroundGoal(this)); + @Override + public boolean isCarnivore() { + return true; + } + @Override + public boolean isMarine() { + return false; + } - } + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_ALLOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); + } public static AttributeSupplier.Builder createAttributes() { return Animal.createLivingAttributes() @@ -105,11 +111,6 @@ public class AllosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 18D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } - @Nullable @Override public AgeableMob getBreedOffspring(ServerLevel pLevel, AgeableMob pOtherParent) { @@ -135,17 +136,17 @@ public class AllosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(AllosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.allosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.allosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.allosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.allosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.allosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -313,4 +314,9 @@ public class AllosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.ALLOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.ALBERTOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AlvarezsaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AlvarezsaurusEntity.java index 35d8fe8..358025e 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AlvarezsaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AlvarezsaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlvarezsaurusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class AlvarezsaurusEntity extends Animal implements GeoEntity { +public class AlvarezsaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,40 +65,47 @@ public class AlvarezsaurusEntity extends Animal implements GeoEntity { public AlvarezsaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return AlvarezsaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, ParasaurolophusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(10, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(11, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(12, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(13, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(14, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(15, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(20, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; } - public static AttributeSupplier.Builder createAttributes() { + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_ALVAREZSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); + } + + public static AttributeSupplier.Builder createAttributes() { return Animal.createLivingAttributes() .add(Attributes.MAX_HEALTH, 5D) .add(Attributes.MOVEMENT_SPEED, 0.3D) @@ -104,10 +116,6 @@ public class AlvarezsaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 2D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -133,17 +141,17 @@ public class AlvarezsaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(AlvarezsaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.alvarezsaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.alvarezsaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.alvarezsaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.alvarezsaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.alvarezsaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -310,4 +318,9 @@ public class AlvarezsaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.ALVAREZSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.ALVAREZSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AnkylosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AnkylosaurusEntity.java index 6fb8c5b..85f2440 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AnkylosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/AnkylosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AnkylosaurusVariant; @@ -28,6 +32,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -44,7 +49,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class AnkylosaurusEntity extends Animal implements GeoEntity { +public class AnkylosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -59,35 +64,47 @@ public class AnkylosaurusEntity extends Animal implements GeoEntity { public AnkylosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THYREOPHORAN, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() {this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return AnkylosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(6, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(7, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(8, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(11, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(13, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(14, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(15, new EatBlockGoal(this)); - this.goalSelector.addGoal(16, new RandomLookAroundGoal(this)); - + public boolean isCarnivore() { + return false; } - public static AttributeSupplier.Builder createAttributes() { + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_ANKYLOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); + } + + public static AttributeSupplier.Builder createAttributes() { return Animal.createLivingAttributes() .add(Attributes.MAX_HEALTH, 75D) .add(Attributes.MOVEMENT_SPEED, 0.3D) @@ -98,10 +115,6 @@ public class AnkylosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 18D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -127,17 +140,17 @@ public class AnkylosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(AnkylosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.ankylosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.ankylosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.ankylosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.ankylosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.ankylosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -304,4 +317,9 @@ public class AnkylosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.ANKYLOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.ANKYLOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ApatosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ApatosaurusEntity.java index bc4b6da..ea1a106 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ApatosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ApatosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.ApatosaurusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; @@ -46,7 +51,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class ApatosaurusEntity extends Animal implements GeoEntity { +public class ApatosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -61,31 +66,44 @@ public class ApatosaurusEntity extends Animal implements GeoEntity { public ApatosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.SAUROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return ApatosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(9, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(9, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(10, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(11, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(12, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(13, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_APATOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -99,10 +117,6 @@ public class ApatosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 15D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -129,17 +143,17 @@ public class ApatosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(ApatosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.apatosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.apatosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.apatosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.apatosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.apatosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -312,4 +326,9 @@ public class ApatosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.APATOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.APATOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ArambourgianiaEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ArambourgianiaEntity.java index 99fee44..c0b00e7 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ArambourgianiaEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ArambourgianiaEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.ArambourgianiaVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class ArambourgianiaEntity extends Animal implements GeoEntity, FlyingAnimal { +public class ArambourgianiaEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,94 +75,44 @@ public class ArambourgianiaEntity extends Animal implements GeoEntity, FlyingAni public ArambourgianiaEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return ArambourgianiaEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return ArambourgianiaEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !ArambourgianiaEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || ArambourgianiaEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = ArambourgianiaEntity.this.position(); - RandomSource random = ArambourgianiaEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_ARAMBOURGIANIA_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = ArambourgianiaEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (ArambourgianiaEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -195,10 +150,6 @@ public class ArambourgianiaEntity extends Animal implements GeoEntity, FlyingAni protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -225,7 +176,7 @@ public class ArambourgianiaEntity extends Animal implements GeoEntity, FlyingAni @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!ArambourgianiaEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.arambourgiania.fly", Animation.LoopType.LOOP)); } @@ -236,10 +187,10 @@ public class ArambourgianiaEntity extends Animal implements GeoEntity, FlyingAni return state.setAndContinue(RawAnimation.begin().then("anim.arambourgiania.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.arambourgiania.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.arambourgiania.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -407,4 +358,9 @@ public class ArambourgianiaEntity extends Animal implements GeoEntity, FlyingAni protected @Nullable SoundEvent getDeathSound() { return ModSounds.ARAMBOURGIANIA_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.ARAMBOURGIANIA_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/BaryonyxEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/BaryonyxEntity.java index c214191..b03e9db 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/BaryonyxEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/BaryonyxEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.BaryonyxVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class BaryonyxEntity extends Animal implements GeoEntity { +public class BaryonyxEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,41 +65,47 @@ public class BaryonyxEntity extends Animal implements GeoEntity { public BaryonyxEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.PISCIVORE, + IDinoData.Type.AMPHIBIOUS, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return BaryonyxEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.targetSelector.addGoal(9, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(10, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, TyrannosaurusRexEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, IndominusRexEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(19, new RandomLookAroundGoal(this)); - - + public boolean isCarnivore() { + return true; } - public static AttributeSupplier.Builder createAttributes() { + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return true; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_BARYONYX_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); + } + + public static AttributeSupplier.Builder createAttributes() { return Animal.createLivingAttributes() .add(Attributes.MAX_HEALTH, 55D) .add(Attributes.MOVEMENT_SPEED, 0.3D) @@ -105,10 +116,6 @@ public class BaryonyxEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 15D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -135,17 +142,17 @@ public class BaryonyxEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(BaryonyxEntity.this.isSprinting() ? RawAnimation.begin().then("anim.baryonyx.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.baryonyx.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.baryonyx.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.baryonyx.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.baryonyx.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -313,4 +320,9 @@ public class BaryonyxEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.BARYONYX_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.BARYONYX_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/BrachiosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/BrachiosaurusEntity.java index 1439e5a..fcf6676 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/BrachiosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/BrachiosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.BrachiosaurusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; @@ -46,7 +51,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class BrachiosaurusEntity extends Animal implements GeoEntity { +public class BrachiosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -61,31 +66,44 @@ public class BrachiosaurusEntity extends Animal implements GeoEntity { public BrachiosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.SAUROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return BrachiosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(9, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(9, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(10, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(11, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(12, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(13, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_BRACHIOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -99,10 +117,6 @@ public class BrachiosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 20D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -129,17 +143,17 @@ public class BrachiosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(BrachiosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.brachiosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.brachiosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.brachiosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.brachiosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.brachiosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -312,4 +326,9 @@ public class BrachiosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.BRACHIOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.BRACHIOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CarcharodontosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CarcharodontosaurusEntity.java index 612a1de..0fa0b7e 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CarcharodontosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CarcharodontosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.CarcharodontosaurusVariant; @@ -31,6 +35,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; @@ -48,7 +53,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class CarcharodontosaurusEntity extends Animal implements GeoEntity { +public class CarcharodontosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -63,43 +68,47 @@ public class CarcharodontosaurusEntity extends Animal implements GeoEntity { public CarcharodontosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return CarcharodontosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(9, new FollowMobGoal(this, 1.2, (float) 20, (float) 10)); - this.targetSelector.addGoal(10, new NearestAttackableTargetGoal<>(this, Monster.class, true)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, SpinosaurusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, IndominusRexEntity.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); - - + public boolean isCarnivore() { + return true; } - public static AttributeSupplier.Builder createAttributes() { + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_CARCHARODONTOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); + } + + public static AttributeSupplier.Builder createAttributes() { return Animal.createLivingAttributes() .add(Attributes.MAX_HEALTH, 80D) .add(Attributes.MOVEMENT_SPEED, 0.3D) @@ -110,10 +119,6 @@ public class CarcharodontosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 20D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -140,17 +145,17 @@ public class CarcharodontosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(CarcharodontosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.carcharodontosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.carcharodontosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.carcharodontosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.carcharodontosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.carcharodontosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -322,4 +327,9 @@ public class CarcharodontosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.CARCHARODONTOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.CARCHARODONTOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CarnotaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CarnotaurusEntity.java index 7514fde..be41a14 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CarnotaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CarnotaurusEntity.java @@ -1,8 +1,8 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; -import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; -import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; +import net.cmr.jurassicrevived.entity.ai.*; import net.cmr.jurassicrevived.entity.client.CarnotaurusVariant; import net.cmr.jurassicrevived.entity.client.CarnotaurusVariant; import net.cmr.jurassicrevived.sound.ModSounds; @@ -30,6 +30,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -46,7 +47,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class CarnotaurusEntity extends Animal implements GeoEntity { +public class CarnotaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -61,43 +62,47 @@ public class CarnotaurusEntity extends Animal implements GeoEntity { public CarnotaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } - @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return CarnotaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(9, new FollowMobGoal(this, 1.2, (float) 20, (float) 10)); - this.targetSelector.addGoal(10, new NearestAttackableTargetGoal<>(this, Monster.class, true)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, SpinosaurusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, IndominusRexEntity.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + @Override + public boolean isCarnivore() { + return true; + } + @Override + public boolean isMarine() { + return false; + } - } + @Override + public boolean isAmphibious() { + return false; + } - public static AttributeSupplier.Builder createAttributes() { + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_CARNOTAURUS_EGG.get(); + } + + @Override + public DinoEntityBase.DinoAIConfig getAIConfig() { + return new DinoEntityBase.DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); + } + + public static AttributeSupplier.Builder createAttributes() { return Animal.createLivingAttributes() .add(Attributes.MAX_HEALTH, 55D) .add(Attributes.MOVEMENT_SPEED, 0.3D) @@ -108,11 +113,6 @@ public class CarnotaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 16D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } - @Nullable @Override public AgeableMob getBreedOffspring(ServerLevel pLevel, AgeableMob pOtherParent) { @@ -138,17 +138,17 @@ public class CarnotaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(CarnotaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.carnotaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.carnotaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.carnotaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.carnotaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.carnotaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -315,4 +315,9 @@ public class CarnotaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.CARNOTAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.CARNOTAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CearadactylusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CearadactylusEntity.java index 08b34e2..bc1ef7f 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CearadactylusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CearadactylusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.CearadactylusVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class CearadactylusEntity extends Animal implements GeoEntity, FlyingAnimal { +public class CearadactylusEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,94 +75,44 @@ public class CearadactylusEntity extends Animal implements GeoEntity, FlyingAnim public CearadactylusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.PISCIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return CearadactylusEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return CearadactylusEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !CearadactylusEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || CearadactylusEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = CearadactylusEntity.this.position(); - RandomSource random = CearadactylusEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_CEARADACTYLUS_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = CearadactylusEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (CearadactylusEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -195,10 +150,6 @@ public class CearadactylusEntity extends Animal implements GeoEntity, FlyingAnim protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -225,7 +176,7 @@ public class CearadactylusEntity extends Animal implements GeoEntity, FlyingAnim @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!CearadactylusEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.cearadactylus.fly", Animation.LoopType.LOOP)); } @@ -236,10 +187,10 @@ public class CearadactylusEntity extends Animal implements GeoEntity, FlyingAnim return state.setAndContinue(RawAnimation.begin().then("anim.cearadactylus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.cearadactylus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.cearadactylus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -407,4 +358,9 @@ public class CearadactylusEntity extends Animal implements GeoEntity, FlyingAnim protected @Nullable SoundEvent getDeathSound() { return ModSounds.CEARADACTYLUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.CEARADACTYLUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CeratosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CeratosaurusEntity.java index 22fbae2..b0d3768 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CeratosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CeratosaurusEntity.java @@ -1,8 +1,8 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; -import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; -import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; +import net.cmr.jurassicrevived.entity.ai.*; import net.cmr.jurassicrevived.entity.client.CeratosaurusVariant; import net.cmr.jurassicrevived.entity.client.CeratosaurusVariant; import net.cmr.jurassicrevived.sound.ModSounds; @@ -29,6 +29,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +46,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class CeratosaurusEntity extends Animal implements GeoEntity { +public class CeratosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,38 +61,45 @@ public class CeratosaurusEntity extends Animal implements GeoEntity { public CeratosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } - @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return CeratosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(8, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(9, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(10, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(11, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(12, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(20, new RandomLookAroundGoal(this)); - } + @Override + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_CERATOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); + } public static AttributeSupplier.Builder createAttributes() { return Animal.createLivingAttributes() @@ -104,11 +112,6 @@ public class CeratosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 16D ); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } - @Nullable @Override public AgeableMob getBreedOffspring(ServerLevel pLevel, AgeableMob pOtherParent) { @@ -134,17 +137,17 @@ public class CeratosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(CeratosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.ceratosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.ceratosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.ceratosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.ceratosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.ceratosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -312,4 +315,9 @@ public class CeratosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.CERATOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.CERATOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ChasmosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ChasmosaurusEntity.java index 61172fb..56ab4f5 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ChasmosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ChasmosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.ChasmosaurusVariant; @@ -28,6 +32,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -44,7 +49,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class ChasmosaurusEntity extends Animal implements GeoEntity { +public class ChasmosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -59,32 +64,44 @@ public class ChasmosaurusEntity extends Animal implements GeoEntity { public ChasmosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.CERAPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() {this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return ChasmosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(6, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(7, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(8, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(11, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(13, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(14, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(15, new EatBlockGoal(this)); - this.goalSelector.addGoal(16, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_CHASMOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -98,10 +115,6 @@ public class ChasmosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 14D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -127,17 +140,17 @@ public class ChasmosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(ChasmosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.chasmosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.chasmosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.chasmosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.chasmosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.chasmosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -304,4 +317,9 @@ public class ChasmosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.CHASMOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.CHASMOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ChickenosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ChickenosaurusEntity.java index 04dee91..c780bec 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ChickenosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ChickenosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.ChickenosaurusVariant; @@ -30,6 +34,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -46,7 +51,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class ChickenosaurusEntity extends Animal implements GeoEntity { +public class ChickenosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -61,37 +66,44 @@ public class ChickenosaurusEntity extends Animal implements GeoEntity { public ChickenosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.NEUTRAL, + 0.75f, + IDinoData.DietaryClassification.OMNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.DIURNAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return ChickenosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, ParasaurolophusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(10, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(11, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(12, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(13, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(14, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(15, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(20, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_CHICKENOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -105,10 +117,6 @@ public class ChickenosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 8D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is((Item) ModItems.MAC_N_CHEESE); - } @Nullable @Override @@ -134,17 +142,17 @@ public class ChickenosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(ChickenosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.chickenosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.chickenosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.chickenosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.chickenosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.chickenosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -311,4 +319,9 @@ public class ChickenosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.CHICKENOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.CHICKENOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CoelophysisEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CoelophysisEntity.java index 27d9241..f639095 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CoelophysisEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CoelophysisEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.CoelophysisVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class CoelophysisEntity extends Animal implements GeoEntity { +public class CoelophysisEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,37 +65,44 @@ public class CoelophysisEntity extends Animal implements GeoEntity { public CoelophysisEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return CoelophysisEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, ParasaurolophusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(10, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(11, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(12, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(13, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(14, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(15, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(20, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_COELOPHYSIS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -104,10 +116,6 @@ public class CoelophysisEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 4D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -133,17 +141,17 @@ public class CoelophysisEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(CoelophysisEntity.this.isSprinting() ? RawAnimation.begin().then("anim.coelophysis.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.coelophysis.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.coelophysis.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.coelophysis.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.coelophysis.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -310,4 +318,9 @@ public class CoelophysisEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.COELOPHYSIS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.COELOPHYSIS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CoelurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CoelurusEntity.java index f10b65e..789ab65 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CoelurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CoelurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.CoelurusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class CoelurusEntity extends Animal implements GeoEntity { +public class CoelurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,37 +65,44 @@ public class CoelurusEntity extends Animal implements GeoEntity { public CoelurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return CoelurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, ParasaurolophusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(10, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(11, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(12, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(13, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(14, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(15, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(20, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_COELURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -104,10 +116,6 @@ public class CoelurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 4D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -133,17 +141,17 @@ public class CoelurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(CoelurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.coelurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.coelurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.coelurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.coelurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.coelurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -310,4 +318,9 @@ public class CoelurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.COELURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.COELURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CompsognathusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CompsognathusEntity.java index 735d4cf..e33af0f 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CompsognathusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CompsognathusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.CompsognathusVariant; @@ -28,6 +32,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -44,7 +49,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class CompsognathusEntity extends Animal implements GeoEntity { +public class CompsognathusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -59,25 +64,44 @@ public class CompsognathusEntity extends Animal implements GeoEntity { public CompsognathusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.SCAVENGER, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return CompsognathusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(4, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(5, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(6, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(8, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(9, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_COMPSOGNATHUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -91,10 +115,6 @@ public class CompsognathusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_KNOCKBACK, 0D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -120,17 +140,17 @@ public class CompsognathusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(CompsognathusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.compsognathus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.compsognathus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.compsognathus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.compsognathus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.compsognathus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -297,4 +317,9 @@ public class CompsognathusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.COMPSOGNATHUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.COMPSOGNATHUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ConcavenatorEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ConcavenatorEntity.java index e95c295..3c0e585 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ConcavenatorEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ConcavenatorEntity.java @@ -1,8 +1,8 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; -import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; -import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; +import net.cmr.jurassicrevived.entity.ai.*; import net.cmr.jurassicrevived.entity.client.ConcavenatorVariant; import net.cmr.jurassicrevived.entity.client.ConcavenatorVariant; import net.cmr.jurassicrevived.sound.ModSounds; @@ -29,6 +29,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +46,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class ConcavenatorEntity extends Animal implements GeoEntity { +public class ConcavenatorEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,39 +61,45 @@ public class ConcavenatorEntity extends Animal implements GeoEntity { public ConcavenatorEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } - @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return ConcavenatorEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(9, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(10, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(11, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(12, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(13, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); - } + @Override + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_CONCAVENATOR_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); + } public static AttributeSupplier.Builder createAttributes() { return Animal.createLivingAttributes() @@ -105,11 +112,6 @@ public class ConcavenatorEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_KNOCKBACK, 0D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } - @Nullable @Override public AgeableMob getBreedOffspring(ServerLevel pLevel, AgeableMob pOtherParent) { @@ -135,17 +137,17 @@ public class ConcavenatorEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(ConcavenatorEntity.this.isSprinting() ? RawAnimation.begin().then("anim.concavenator.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.concavenator.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.concavenator.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.concavenator.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.concavenator.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -312,4 +314,9 @@ public class ConcavenatorEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.CONCAVENATOR_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.CONCAVENATOR_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CorythosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CorythosaurusEntity.java index a2774fc..6302b8e 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CorythosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/CorythosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.CorythosaurusVariant; import net.cmr.jurassicrevived.entity.client.CorythosaurusVariant; @@ -26,6 +30,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -42,7 +47,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class CorythosaurusEntity extends Animal implements GeoEntity { +public class CorythosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -57,24 +62,44 @@ public class CorythosaurusEntity extends Animal implements GeoEntity { public CorythosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.ORNITHOPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15)); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(7, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(10, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(11, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(13, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_CORYTHOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -88,10 +113,6 @@ public class CorythosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 12D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -117,17 +138,17 @@ public class CorythosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(CorythosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.corythosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.corythosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.corythosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.corythosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.corythosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -294,4 +315,9 @@ public class CorythosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.CORYTHOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.CORYTHOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DeinonychusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DeinonychusEntity.java index 67d1c93..5ee3124 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DeinonychusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DeinonychusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.DeinonychusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class DeinonychusEntity extends Animal implements GeoEntity { +public class DeinonychusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,38 +65,44 @@ public class DeinonychusEntity extends Animal implements GeoEntity { public DeinonychusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return DeinonychusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(9, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(10, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(11, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(12, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(13, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_DEINONYCHUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -105,10 +116,6 @@ public class DeinonychusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_KNOCKBACK, 0D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -134,17 +141,17 @@ public class DeinonychusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(DeinonychusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.deinonychus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.deinonychus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.deinonychus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.deinonychus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.deinonychus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -311,4 +318,9 @@ public class DeinonychusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.DEINONYCHUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.DEINONYCHUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DilophosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DilophosaurusEntity.java index fa14f26..c36006d 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DilophosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DilophosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.DilophosaurusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class DilophosaurusEntity extends Animal implements GeoEntity { +public class DilophosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,37 +65,44 @@ public class DilophosaurusEntity extends Animal implements GeoEntity { public DilophosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return DilophosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, ParasaurolophusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(10, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(11, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(12, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(13, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(14, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(15, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(20, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_DILOPHOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -104,10 +116,6 @@ public class DilophosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 5D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -134,17 +142,17 @@ public class DilophosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(DilophosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.dilophosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.dilophosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.dilophosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.dilophosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.dilophosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -311,4 +319,9 @@ public class DilophosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.DILOPHOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.DILOPHOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DimorphodonEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DimorphodonEntity.java index 44e32f0..0a4a03c 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DimorphodonEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DimorphodonEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.DimorphodonVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class DimorphodonEntity extends Animal implements GeoEntity, FlyingAnimal { +public class DimorphodonEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,94 +75,44 @@ public class DimorphodonEntity extends Animal implements GeoEntity, FlyingAnimal public DimorphodonEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return DimorphodonEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return DimorphodonEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !DimorphodonEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || DimorphodonEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = DimorphodonEntity.this.position(); - RandomSource random = DimorphodonEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_DIMORPHODON_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = DimorphodonEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (DimorphodonEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -195,10 +150,6 @@ public class DimorphodonEntity extends Animal implements GeoEntity, FlyingAnimal protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -225,7 +176,7 @@ public class DimorphodonEntity extends Animal implements GeoEntity, FlyingAnimal @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!DimorphodonEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.dimorphodon.fly", Animation.LoopType.LOOP)); } @@ -236,10 +187,10 @@ public class DimorphodonEntity extends Animal implements GeoEntity, FlyingAnimal return state.setAndContinue(RawAnimation.begin().then("anim.dimorphodon.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.dimorphodon.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.dimorphodon.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -407,4 +358,9 @@ public class DimorphodonEntity extends Animal implements GeoEntity, FlyingAnimal protected @Nullable SoundEvent getDeathSound() { return ModSounds.DIMORPHODON_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.DIMORPHODON_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DiplodocusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DiplodocusEntity.java index 25ffc57..314db67 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DiplodocusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DiplodocusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.DiplodocusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; @@ -46,7 +51,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class DiplodocusEntity extends Animal implements GeoEntity { +public class DiplodocusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -61,31 +66,44 @@ public class DiplodocusEntity extends Animal implements GeoEntity { public DiplodocusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.SAUROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return DiplodocusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(9, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(9, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(10, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(11, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(12, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(13, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_DIPLODOCUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -99,10 +117,6 @@ public class DiplodocusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 15D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -129,17 +143,17 @@ public class DiplodocusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(DiplodocusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.diplodocus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.diplodocus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.diplodocus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.diplodocus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.diplodocus.call", Animation.LoopType.PLAY_ONCE))); } @@ -311,4 +325,9 @@ public class DiplodocusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.DIPLODOCUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.DIPLODOCUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DistortusRexEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DistortusRexEntity.java index 7d551d8..9735939 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DistortusRexEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DistortusRexEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.DistortusRexVariant; @@ -31,6 +35,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; @@ -48,7 +53,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class DistortusRexEntity extends Animal implements GeoEntity { +public class DistortusRexEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -63,40 +68,44 @@ public class DistortusRexEntity extends Animal implements GeoEntity { public DistortusRexEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return DistortusRexEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(9, new FollowMobGoal(this, 1.2, (float) 20, (float) 10)); - this.targetSelector.addGoal(10, new NearestAttackableTargetGoal<>(this, Monster.class, true)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, SpinosaurusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, IndominusRexEntity.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + @Override + public boolean isMarine() { + return false; + } + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_DISTORTUS_REX_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -110,10 +119,6 @@ public class DistortusRexEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 35D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -140,17 +145,17 @@ public class DistortusRexEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(DistortusRexEntity.this.isSprinting() ? RawAnimation.begin().then("anim.distortus_rex.walk", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.distortus_rex.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.distortus_rex.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.distortus_rex.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.distortus_rex.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -322,4 +327,9 @@ public class DistortusRexEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.DISTORTUS_REX_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.DISTORTUS_REX_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DryosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DryosaurusEntity.java index d400d6b..8ab19c8 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DryosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/DryosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.DryosaurusVariant; import net.cmr.jurassicrevived.entity.client.DryosaurusVariant; @@ -26,6 +30,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -42,7 +47,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class DryosaurusEntity extends Animal implements GeoEntity { +public class DryosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -57,26 +62,44 @@ public class DryosaurusEntity extends Animal implements GeoEntity { public DryosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.ORNITHOPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15)); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(7, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(10, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(11, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(13, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(14, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(15, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_DRYOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -90,10 +113,6 @@ public class DryosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 0D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -119,17 +138,17 @@ public class DryosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(DryosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.dryosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.dryosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.dryosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.dryosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.dryosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -296,4 +315,9 @@ public class DryosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.DRYOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.DRYOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/EdmontosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/EdmontosaurusEntity.java index 899e97d..150ff22 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/EdmontosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/EdmontosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.EdmontosaurusVariant; import net.cmr.jurassicrevived.entity.client.EdmontosaurusVariant; @@ -26,6 +30,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -42,7 +47,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class EdmontosaurusEntity extends Animal implements GeoEntity { +public class EdmontosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -57,24 +62,44 @@ public class EdmontosaurusEntity extends Animal implements GeoEntity { public EdmontosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.ORNITHOPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15)); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(7, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(10, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(11, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(13, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_EDMONTOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -88,10 +113,6 @@ public class EdmontosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 12D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -117,17 +138,17 @@ public class EdmontosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(EdmontosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.edmontosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.edmontosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.edmontosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.edmontosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.edmontosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -294,4 +315,9 @@ public class EdmontosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.EDMONTOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.EDMONTOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/FDuckEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/FDuckEntity.java index c92066b..d9267ac 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/FDuckEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/FDuckEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.FDuckVariant; @@ -30,6 +34,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -46,7 +51,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class FDuckEntity extends Animal implements GeoEntity { +public class FDuckEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -61,37 +66,44 @@ public class FDuckEntity extends Animal implements GeoEntity { public FDuckEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.NEUTRAL, + 0.75f, + IDinoData.DietaryClassification.OMNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.DIURNAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return FDuckEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, ParasaurolophusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(10, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(11, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(12, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(13, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(14, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(15, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(20, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_FDUCK_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -105,10 +117,6 @@ public class FDuckEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 8D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is((Item) ModItems.MAC_N_CHEESE); - } @Nullable @Override @@ -134,17 +142,17 @@ public class FDuckEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(FDuckEntity.this.isSprinting() ? RawAnimation.begin().then("anim.fduck.walk", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.fduck.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.fduck.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.fduck.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.fduck.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -311,4 +319,9 @@ public class FDuckEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.FDUCK_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.FDUCK_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GallimimusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GallimimusEntity.java index 5511571..3547693 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GallimimusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GallimimusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.GallimimusVariant; import net.cmr.jurassicrevived.entity.client.GallimimusVariant; @@ -26,6 +30,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -42,7 +47,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class GallimimusEntity extends Animal implements GeoEntity { +public class GallimimusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -57,26 +62,44 @@ public class GallimimusEntity extends Animal implements GeoEntity { public GallimimusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.ORNITHOPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15)); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(7, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(10, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(11, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(13, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(14, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(15, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_GALLIMIMUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -90,10 +113,6 @@ public class GallimimusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 0D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -119,17 +138,17 @@ public class GallimimusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(GallimimusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.gallimimus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.gallimimus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.gallimimus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.gallimimus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.gallimimus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -296,4 +315,9 @@ public class GallimimusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.GALLIMIMUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.GALLIMIMUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GeosternbergiaEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GeosternbergiaEntity.java index 15535aa..48c98ea 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GeosternbergiaEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GeosternbergiaEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.GeosternbergiaVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class GeosternbergiaEntity extends Animal implements GeoEntity, FlyingAnimal { +public class GeosternbergiaEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,94 +75,44 @@ public class GeosternbergiaEntity extends Animal implements GeoEntity, FlyingAni public GeosternbergiaEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return GeosternbergiaEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return GeosternbergiaEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !GeosternbergiaEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || GeosternbergiaEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = GeosternbergiaEntity.this.position(); - RandomSource random = GeosternbergiaEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_GEOSTERNBERGIA_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = GeosternbergiaEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (GeosternbergiaEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -195,10 +150,6 @@ public class GeosternbergiaEntity extends Animal implements GeoEntity, FlyingAni protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -225,7 +176,7 @@ public class GeosternbergiaEntity extends Animal implements GeoEntity, FlyingAni @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!GeosternbergiaEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.geosternbergia.fly", Animation.LoopType.LOOP)); } @@ -236,10 +187,10 @@ public class GeosternbergiaEntity extends Animal implements GeoEntity, FlyingAni return state.setAndContinue(RawAnimation.begin().then("anim.geosternbergia.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.geosternbergia.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.geosternbergia.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -407,4 +358,9 @@ public class GeosternbergiaEntity extends Animal implements GeoEntity, FlyingAni protected @Nullable SoundEvent getDeathSound() { return ModSounds.GEOSTERNBERGIA_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.GEOSTERNBERGIA_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GiganotosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GiganotosaurusEntity.java index 572cc0f..10cb1e5 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GiganotosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GiganotosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.GiganotosaurusVariant; @@ -30,6 +34,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -46,7 +51,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class GiganotosaurusEntity extends Animal implements GeoEntity { +public class GiganotosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -61,40 +66,44 @@ public class GiganotosaurusEntity extends Animal implements GeoEntity { public GiganotosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return GiganotosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(9, new FollowMobGoal(this, 1.2, (float) 20, (float) 10)); - this.targetSelector.addGoal(10, new NearestAttackableTargetGoal<>(this, Monster.class, true)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, SpinosaurusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, IndominusRexEntity.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + @Override + public boolean isMarine() { + return false; + } + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_GIGANOTOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -108,10 +117,6 @@ public class GiganotosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 20D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -138,17 +143,17 @@ public class GiganotosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(GiganotosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.giganotosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.giganotosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.giganotosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.giganotosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.giganotosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -315,4 +320,9 @@ public class GiganotosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.GIGANOTOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.GIGANOTOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GuanlongEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GuanlongEntity.java index 7a59bbd..a9ad0dd 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GuanlongEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GuanlongEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.GuanlongVariant; @@ -30,6 +34,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -46,7 +51,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class GuanlongEntity extends Animal implements GeoEntity { +public class GuanlongEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -61,40 +66,44 @@ public class GuanlongEntity extends Animal implements GeoEntity { public GuanlongEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return GuanlongEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(9, new FollowMobGoal(this, 1.2, (float) 20, (float) 10)); - this.targetSelector.addGoal(10, new NearestAttackableTargetGoal<>(this, Monster.class, true)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, SpinosaurusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, IndominusRexEntity.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + @Override + public boolean isMarine() { + return false; + } + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_GUANLONG_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -108,10 +117,6 @@ public class GuanlongEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 5D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -137,17 +142,17 @@ public class GuanlongEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(GuanlongEntity.this.isSprinting() ? RawAnimation.begin().then("anim.guanlong.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.guanlong.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.guanlong.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.guanlong.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.guanlong.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -314,4 +319,9 @@ public class GuanlongEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.GUANLONG_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.GUANLONG_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GuidracoEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GuidracoEntity.java index 1135bac..8e29cb4 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GuidracoEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/GuidracoEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.GuidracoVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class GuidracoEntity extends Animal implements GeoEntity, FlyingAnimal { +public class GuidracoEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,94 +75,44 @@ public class GuidracoEntity extends Animal implements GeoEntity, FlyingAnimal { public GuidracoEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.PISCIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return GuidracoEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return GuidracoEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !GuidracoEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || GuidracoEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = GuidracoEntity.this.position(); - RandomSource random = GuidracoEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_GUIDRACO_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = GuidracoEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (GuidracoEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -195,10 +150,6 @@ public class GuidracoEntity extends Animal implements GeoEntity, FlyingAnimal { protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -225,7 +176,7 @@ public class GuidracoEntity extends Animal implements GeoEntity, FlyingAnimal { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!GuidracoEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.guidraco.fly", Animation.LoopType.LOOP)); } @@ -236,10 +187,10 @@ public class GuidracoEntity extends Animal implements GeoEntity, FlyingAnimal { return state.setAndContinue(RawAnimation.begin().then("anim.guidraco.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.guidraco.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.guidraco.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -407,4 +358,9 @@ public class GuidracoEntity extends Animal implements GeoEntity, FlyingAnimal { protected @Nullable SoundEvent getDeathSound() { return ModSounds.GUIDRACO_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.GUIDRACO_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/HadrosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/HadrosaurusEntity.java index c3802da..c1102aa 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/HadrosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/HadrosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.HadrosaurusVariant; import net.cmr.jurassicrevived.entity.client.HadrosaurusVariant; @@ -26,6 +30,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -42,7 +47,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class HadrosaurusEntity extends Animal implements GeoEntity { +public class HadrosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -57,24 +62,44 @@ public class HadrosaurusEntity extends Animal implements GeoEntity { public HadrosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.ORNITHOPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15)); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(7, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(10, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(11, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(13, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_HADROSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -88,10 +113,6 @@ public class HadrosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 12D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -117,17 +138,17 @@ public class HadrosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(HadrosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.hadrosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.hadrosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.hadrosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.hadrosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.hadrosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -294,4 +315,9 @@ public class HadrosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.HADROSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.HADROSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/HerrerasaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/HerrerasaurusEntity.java index 882ef67..36ee61f 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/HerrerasaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/HerrerasaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.HerrerasaurusVariant; @@ -30,6 +34,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -46,7 +51,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class HerrerasaurusEntity extends Animal implements GeoEntity { +public class HerrerasaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -61,40 +66,44 @@ public class HerrerasaurusEntity extends Animal implements GeoEntity { public HerrerasaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return HerrerasaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(9, new FollowMobGoal(this, 1.2, (float) 20, (float) 10)); - this.targetSelector.addGoal(10, new NearestAttackableTargetGoal<>(this, Monster.class, true)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, SpinosaurusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, IndominusRexEntity.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + @Override + public boolean isMarine() { + return false; + } + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_HERRERASAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -108,10 +117,6 @@ public class HerrerasaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 8D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -138,17 +143,17 @@ public class HerrerasaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(HerrerasaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.herrerasaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.herrerasaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.herrerasaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.herrerasaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.herrerasaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -315,4 +320,9 @@ public class HerrerasaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.HERRERASAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.HERRERASAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/HypsilophodonEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/HypsilophodonEntity.java index 9d53381..2a92be0 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/HypsilophodonEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/HypsilophodonEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.HypsilophodonVariant; import net.cmr.jurassicrevived.entity.client.HypsilophodonVariant; @@ -26,6 +30,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -42,7 +47,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class HypsilophodonEntity extends Animal implements GeoEntity { +public class HypsilophodonEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -57,26 +62,44 @@ public class HypsilophodonEntity extends Animal implements GeoEntity { public HypsilophodonEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.ORNITHOPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15)); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(7, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(10, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(11, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(13, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(14, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(15, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_HYPSILOPHODON_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -90,10 +113,6 @@ public class HypsilophodonEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 0D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -119,17 +138,17 @@ public class HypsilophodonEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(HypsilophodonEntity.this.isSprinting() ? RawAnimation.begin().then("anim.hypsilophodon.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.hypsilophodon.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.hypsilophodon.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.hypsilophodon.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.hypsilophodon.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -296,4 +315,9 @@ public class HypsilophodonEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.HYPSILOPHODON_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.HYPSILOPHODON_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/IndominusRexEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/IndominusRexEntity.java index c15083c..320dc8f 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/IndominusRexEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/IndominusRexEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.IndominusRexVariant; @@ -30,6 +34,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; @@ -47,7 +52,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class IndominusRexEntity extends Animal implements GeoEntity { +public class IndominusRexEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -62,39 +67,44 @@ public class IndominusRexEntity extends Animal implements GeoEntity { public IndominusRexEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return IndominusRexEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.targetSelector.addGoal(8, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 1.2, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, TyrannosaurusRexEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, SpinosaurusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(20, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + @Override + public boolean isMarine() { + return false; + } + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_INDOMINUS_REX_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -108,10 +118,6 @@ public class IndominusRexEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 25D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -138,17 +144,17 @@ public class IndominusRexEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(IndominusRexEntity.this.isSprinting() ? RawAnimation.begin().then("anim.indominus_rex.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.indominus_rex.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.indominus_rex.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.indominus_rex.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.indominus_rex.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -320,4 +326,9 @@ public class IndominusRexEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.INDOMINUS_REX_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.INDOMINUS_REX_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/IndoraptorEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/IndoraptorEntity.java index 561294c..5c7da67 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/IndoraptorEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/IndoraptorEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.IndoraptorVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class IndoraptorEntity extends Animal implements GeoEntity { +public class IndoraptorEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,38 +65,44 @@ public class IndoraptorEntity extends Animal implements GeoEntity { public IndoraptorEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return IndoraptorEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(9, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(10, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(11, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(12, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(13, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_INDORAPTOR_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -105,10 +116,6 @@ public class IndoraptorEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_KNOCKBACK, 0D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -135,17 +142,17 @@ public class IndoraptorEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(IndoraptorEntity.this.isSprinting() ? RawAnimation.begin().then("anim.indoraptor.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.indoraptor.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.indoraptor.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.indoraptor.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.indoraptor.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -312,4 +319,9 @@ public class IndoraptorEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.INDORAPTOR_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.INDORAPTOR_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/InostranceviaEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/InostranceviaEntity.java index 8f8143d..75f8ada 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/InostranceviaEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/InostranceviaEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.InostranceviaVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class InostranceviaEntity extends Animal implements GeoEntity { +public class InostranceviaEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,37 +65,44 @@ public class InostranceviaEntity extends Animal implements GeoEntity { public InostranceviaEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return InostranceviaEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, ParasaurolophusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(10, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(11, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(12, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(13, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(14, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(15, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(20, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_INOSTRANCEVIA_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -104,10 +116,6 @@ public class InostranceviaEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 10D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -134,17 +142,17 @@ public class InostranceviaEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(InostranceviaEntity.this.isSprinting() ? RawAnimation.begin().then("anim.inostrancevia.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.inostrancevia.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.inostrancevia.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.inostrancevia.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.inostrancevia.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -311,4 +319,9 @@ public class InostranceviaEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.INOSTRANCEVIA_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.INOSTRANCEVIA_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/LambeosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/LambeosaurusEntity.java index a7729d7..dd8b7be 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/LambeosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/LambeosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.LambeosaurusVariant; import net.cmr.jurassicrevived.entity.client.LambeosaurusVariant; @@ -26,6 +30,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -42,7 +47,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class LambeosaurusEntity extends Animal implements GeoEntity { +public class LambeosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -57,24 +62,44 @@ public class LambeosaurusEntity extends Animal implements GeoEntity { public LambeosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.ORNITHOPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15)); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(7, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(10, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(11, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(13, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_LAMBEOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -88,10 +113,6 @@ public class LambeosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 12D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -117,17 +138,17 @@ public class LambeosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(LambeosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.lambeosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.lambeosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.lambeosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.lambeosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.lambeosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -294,4 +315,9 @@ public class LambeosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.LAMBEOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.LAMBEOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/LudodactylusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/LudodactylusEntity.java index 9793f3b..c4010a8 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/LudodactylusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/LudodactylusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.LudodactylusVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class LudodactylusEntity extends Animal implements GeoEntity, FlyingAnimal { +public class LudodactylusEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,95 +75,44 @@ public class LudodactylusEntity extends Animal implements GeoEntity, FlyingAnima public LudodactylusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return LudodactylusEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return LudodactylusEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !LudodactylusEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || LudodactylusEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = LudodactylusEntity.this.position(); - RandomSource random = LudodactylusEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_LUDODACTYLUS_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = LudodactylusEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (LudodactylusEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -196,10 +150,6 @@ public class LudodactylusEntity extends Animal implements GeoEntity, FlyingAnima protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -226,7 +176,7 @@ public class LudodactylusEntity extends Animal implements GeoEntity, FlyingAnima @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!LudodactylusEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.ludodactylus.fly", Animation.LoopType.LOOP)); } @@ -237,10 +187,10 @@ public class LudodactylusEntity extends Animal implements GeoEntity, FlyingAnima return state.setAndContinue(RawAnimation.begin().then("anim.ludodactylus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.ludodactylus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.ludodactylus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -408,4 +358,9 @@ public class LudodactylusEntity extends Animal implements GeoEntity, FlyingAnima protected @Nullable SoundEvent getDeathSound() { return ModSounds.LUDODACTYLUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.LUDODACTYLUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MajungasaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MajungasaurusEntity.java index 3796183..677a86e 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MajungasaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MajungasaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.MajungasaurusVariant; @@ -30,6 +34,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -46,7 +51,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class MajungasaurusEntity extends Animal implements GeoEntity { +public class MajungasaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -61,40 +66,44 @@ public class MajungasaurusEntity extends Animal implements GeoEntity { public MajungasaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return MajungasaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(9, new FollowMobGoal(this, 1.2, (float) 20, (float) 10)); - this.targetSelector.addGoal(10, new NearestAttackableTargetGoal<>(this, Monster.class, true)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, SpinosaurusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, IndominusRexEntity.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + @Override + public boolean isMarine() { + return false; + } + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_MAJUNGASAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -108,10 +117,6 @@ public class MajungasaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 16D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -138,17 +143,17 @@ public class MajungasaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(MajungasaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.majungasaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.majungasaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.majungasaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.majungasaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.majungasaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -315,4 +320,9 @@ public class MajungasaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.MAJUNGASAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.MAJUNGASAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MamenchisaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MamenchisaurusEntity.java index b96d85c..39a7cd4 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MamenchisaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MamenchisaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.MamenchisaurusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; @@ -46,7 +51,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class MamenchisaurusEntity extends Animal implements GeoEntity { +public class MamenchisaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -61,31 +66,44 @@ public class MamenchisaurusEntity extends Animal implements GeoEntity { public MamenchisaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.SAUROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return MamenchisaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(9, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(9, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(10, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(11, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(12, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(13, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_MAMENCHISAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -99,10 +117,6 @@ public class MamenchisaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 20D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -129,17 +143,17 @@ public class MamenchisaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(MamenchisaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.mamenchisaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.mamenchisaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.mamenchisaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.mamenchisaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.mamenchisaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -312,4 +326,9 @@ public class MamenchisaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.MAMENCHISAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.MAMENCHISAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MetriacanthosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MetriacanthosaurusEntity.java index 2e3c572..1e92456 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MetriacanthosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MetriacanthosaurusEntity.java @@ -1,8 +1,8 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; -import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; -import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; +import net.cmr.jurassicrevived.entity.ai.*; import net.cmr.jurassicrevived.entity.client.MetriacanthosaurusVariant; import net.cmr.jurassicrevived.entity.client.MetriacanthosaurusVariant; import net.cmr.jurassicrevived.sound.ModSounds; @@ -29,6 +29,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +46,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class MetriacanthosaurusEntity extends Animal implements GeoEntity { +public class MetriacanthosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,38 +61,45 @@ public class MetriacanthosaurusEntity extends Animal implements GeoEntity { public MetriacanthosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } - @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return MetriacanthosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(8, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(9, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(10, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(11, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(12, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(20, new RandomLookAroundGoal(this)); - } + @Override + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_METRIACANTHOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); + } public static AttributeSupplier.Builder createAttributes() { return Animal.createLivingAttributes() @@ -104,11 +112,6 @@ public class MetriacanthosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 14D ); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } - @Nullable @Override public AgeableMob getBreedOffspring(ServerLevel pLevel, AgeableMob pOtherParent) { @@ -134,17 +137,17 @@ public class MetriacanthosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(MetriacanthosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.metriacanthosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.metriacanthosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.metriacanthosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.metriacanthosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.metriacanthosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -312,4 +315,9 @@ public class MetriacanthosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.METRIACANTHOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.METRIACANTHOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MoganopterusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MoganopterusEntity.java index f5c4c09..4769bc5 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MoganopterusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/MoganopterusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.MoganopterusVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class MoganopterusEntity extends Animal implements GeoEntity, FlyingAnimal { +public class MoganopterusEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,95 +75,44 @@ public class MoganopterusEntity extends Animal implements GeoEntity, FlyingAnima public MoganopterusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return MoganopterusEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return MoganopterusEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !MoganopterusEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || MoganopterusEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = MoganopterusEntity.this.position(); - RandomSource random = MoganopterusEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_MOGANOPTERUS_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = MoganopterusEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (MoganopterusEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -196,10 +150,6 @@ public class MoganopterusEntity extends Animal implements GeoEntity, FlyingAnima protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -226,7 +176,7 @@ public class MoganopterusEntity extends Animal implements GeoEntity, FlyingAnima @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!MoganopterusEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.moganopterus.fly", Animation.LoopType.LOOP)); } @@ -237,10 +187,10 @@ public class MoganopterusEntity extends Animal implements GeoEntity, FlyingAnima return state.setAndContinue(RawAnimation.begin().then("anim.moganopterus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.moganopterus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.moganopterus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -408,4 +358,9 @@ public class MoganopterusEntity extends Animal implements GeoEntity, FlyingAnima protected @Nullable SoundEvent getDeathSound() { return ModSounds.MOGANOPTERUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.MOGANOPTERUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/NyctosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/NyctosaurusEntity.java index f1bccf1..9322914 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/NyctosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/NyctosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.NyctosaurusVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class NyctosaurusEntity extends Animal implements GeoEntity, FlyingAnimal { +public class NyctosaurusEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,95 +75,44 @@ public class NyctosaurusEntity extends Animal implements GeoEntity, FlyingAnimal public NyctosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return NyctosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return NyctosaurusEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !NyctosaurusEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || NyctosaurusEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = NyctosaurusEntity.this.position(); - RandomSource random = NyctosaurusEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_NYCTOSAURUS_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = NyctosaurusEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (NyctosaurusEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -196,10 +150,6 @@ public class NyctosaurusEntity extends Animal implements GeoEntity, FlyingAnimal protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -226,7 +176,7 @@ public class NyctosaurusEntity extends Animal implements GeoEntity, FlyingAnimal @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!NyctosaurusEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.nyctosaurus.fly", Animation.LoopType.LOOP)); } @@ -237,10 +187,10 @@ public class NyctosaurusEntity extends Animal implements GeoEntity, FlyingAnimal return state.setAndContinue(RawAnimation.begin().then("anim.nyctosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.nyctosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.nyctosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -408,4 +358,9 @@ public class NyctosaurusEntity extends Animal implements GeoEntity, FlyingAnimal protected @Nullable SoundEvent getDeathSound() { return ModSounds.NYCTOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.NYCTOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OrnitholestesEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OrnitholestesEntity.java index ca12b44..a9fdb9c 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OrnitholestesEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OrnitholestesEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.OrnitholestesVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class OrnitholestesEntity extends Animal implements GeoEntity { +public class OrnitholestesEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,37 +65,44 @@ public class OrnitholestesEntity extends Animal implements GeoEntity { public OrnitholestesEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return OrnitholestesEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, ParasaurolophusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(10, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(11, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(12, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(13, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(14, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(15, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(20, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_ORNITHOLESTES_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -104,10 +116,6 @@ public class OrnitholestesEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 4D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -133,17 +141,17 @@ public class OrnitholestesEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(OrnitholestesEntity.this.isSprinting() ? RawAnimation.begin().then("anim.ornitholestes.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.ornitholestes.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.ornitholestes.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.ornitholestes.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.ornitholestes.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -310,4 +318,9 @@ public class OrnitholestesEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.ORNITHOLESTES_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.ORNITHOLESTES_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OrnithomimusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OrnithomimusEntity.java index 324b43d..13b5110 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OrnithomimusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OrnithomimusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; import net.cmr.jurassicrevived.entity.client.OrnithomimusVariant; @@ -26,6 +30,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -42,7 +47,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class OrnithomimusEntity extends Animal implements GeoEntity { +public class OrnithomimusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -57,26 +62,44 @@ public class OrnithomimusEntity extends Animal implements GeoEntity { public OrnithomimusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.ORNITHOPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15)); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(7, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(10, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(11, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(13, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(14, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(15, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_ORNITHOMIMUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -90,10 +113,6 @@ public class OrnithomimusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 0D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -119,17 +138,17 @@ public class OrnithomimusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(OrnithomimusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.ornithomimus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.ornithomimus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.ornithomimus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.ornithomimus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.ornithomimus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -296,4 +315,9 @@ public class OrnithomimusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.ORNITHOMIMUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.ORNITHOMIMUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OuranosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OuranosaurusEntity.java index 7ec28f2..d588832 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OuranosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OuranosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; import net.cmr.jurassicrevived.entity.client.OuranosaurusVariant; @@ -26,6 +30,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -42,7 +47,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class OuranosaurusEntity extends Animal implements GeoEntity { +public class OuranosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -57,24 +62,44 @@ public class OuranosaurusEntity extends Animal implements GeoEntity { public OuranosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.ORNITHOPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15)); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(7, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(10, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(11, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(13, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_OURANOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -88,10 +113,6 @@ public class OuranosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 12D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -117,17 +138,17 @@ public class OuranosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(OuranosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.ouranosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.ouranosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.ouranosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.ouranosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.ouranosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -294,4 +315,9 @@ public class OuranosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.OURANOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.OURANOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OviraptorEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OviraptorEntity.java index 53de8d9..17ffeb4 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OviraptorEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/OviraptorEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -28,6 +32,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -44,7 +49,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class OviraptorEntity extends Animal implements GeoEntity { +public class OviraptorEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -59,25 +64,44 @@ public class OviraptorEntity extends Animal implements GeoEntity { public OviraptorEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.SCAVENGER, + 0.75f, + IDinoData.DietaryClassification.OMNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return OviraptorEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(4, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(5, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(6, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(8, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(9, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_OVIRAPTOR_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -91,10 +115,6 @@ public class OviraptorEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_KNOCKBACK, 0D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -120,17 +140,17 @@ public class OviraptorEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(OviraptorEntity.this.isSprinting() ? RawAnimation.begin().then("anim.oviraptor.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.oviraptor.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.oviraptor.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.oviraptor.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.oviraptor.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -297,4 +317,9 @@ public class OviraptorEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.OVIRAPTOR_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.OVIRAPTOR_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/PachycephalosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/PachycephalosaurusEntity.java index 225f945..8e1048e 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/PachycephalosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/PachycephalosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -28,6 +32,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -44,7 +49,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class PachycephalosaurusEntity extends Animal implements GeoEntity { +public class PachycephalosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -59,32 +64,44 @@ public class PachycephalosaurusEntity extends Animal implements GeoEntity { public PachycephalosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.CERAPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() {this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return PachycephalosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(6, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(7, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(8, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(11, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(13, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(14, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(15, new EatBlockGoal(this)); - this.goalSelector.addGoal(16, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_PACHYCEPHALOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -98,10 +115,6 @@ public class PachycephalosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 10D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -127,17 +140,17 @@ public class PachycephalosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(PachycephalosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.pachycephalosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.pachycephalosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.pachycephalosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.pachycephalosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.pachycephalosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -304,4 +317,9 @@ public class PachycephalosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.PACHYCEPHALOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.PACHYCEPHALOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ParasaurolophusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ParasaurolophusEntity.java index 5666fc8..ef74c6d 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ParasaurolophusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ParasaurolophusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; import net.cmr.jurassicrevived.entity.client.ParasaurolophusVariant; @@ -26,6 +30,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -42,7 +47,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class ParasaurolophusEntity extends Animal implements GeoEntity { +public class ParasaurolophusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -57,24 +62,44 @@ public class ParasaurolophusEntity extends Animal implements GeoEntity { public ParasaurolophusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.ORNITHOPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15)); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(7, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(10, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(11, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(13, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_PARASAUROLOPHUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -88,10 +113,6 @@ public class ParasaurolophusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 12D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -117,17 +138,17 @@ public class ParasaurolophusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(ParasaurolophusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.parasaurolophus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.parasaurolophus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.parasaurolophus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.parasaurolophus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.parasaurolophus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -294,4 +315,9 @@ public class ParasaurolophusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.PARASAUROLOPHUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.PARASAUROLOPHUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ProceratosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ProceratosaurusEntity.java index 09d0325..68614df 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ProceratosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ProceratosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class ProceratosaurusEntity extends Animal implements GeoEntity { +public class ProceratosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,37 +65,44 @@ public class ProceratosaurusEntity extends Animal implements GeoEntity { public ProceratosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return ProceratosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, ParasaurolophusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(10, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(11, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(12, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(13, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(14, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(15, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(20, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_PROCERATOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -104,10 +116,6 @@ public class ProceratosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 4D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -133,17 +141,17 @@ public class ProceratosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(ProceratosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.proceratosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.proceratosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.proceratosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.proceratosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.proceratosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -310,4 +318,9 @@ public class ProceratosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.PROCERATOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.PROCERATOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ProcompsognathusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ProcompsognathusEntity.java index 6040af5..04b45c6 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ProcompsognathusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ProcompsognathusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class ProcompsognathusEntity extends Animal implements GeoEntity { +public class ProcompsognathusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,28 +65,44 @@ public class ProcompsognathusEntity extends Animal implements GeoEntity { public ProcompsognathusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.SCAVENGER, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return ProcompsognathusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(9, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(10, new AvoidEntityGoal<>(this, LivingEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(11, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_PROCOMPSOGNATHUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -95,10 +116,6 @@ public class ProcompsognathusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_KNOCKBACK, 0D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -124,17 +141,17 @@ public class ProcompsognathusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(ProcompsognathusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.procompsognathus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.procompsognathus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.procompsognathus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.procompsognathus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.procompsognathus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -301,4 +318,9 @@ public class ProcompsognathusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.PROCOMPSOGNATHUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.PROCOMPSOGNATHUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ProtoceratopsEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ProtoceratopsEntity.java index 7f4f555..cbc25f1 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ProtoceratopsEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ProtoceratopsEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -28,6 +32,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -44,7 +49,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class ProtoceratopsEntity extends Animal implements GeoEntity { +public class ProtoceratopsEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -59,33 +64,44 @@ public class ProtoceratopsEntity extends Animal implements GeoEntity { public ProtoceratopsEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.CERAPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return ProtoceratopsEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(6, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(7, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(8, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(11, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(13, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(14, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(15, new EatBlockGoal(this)); - this.goalSelector.addGoal(16, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_PROTOCERATOPS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -99,10 +115,6 @@ public class ProtoceratopsEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 6D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -128,17 +140,17 @@ public class ProtoceratopsEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(ProtoceratopsEntity.this.isSprinting() ? RawAnimation.begin().then("anim.protoceratops.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.protoceratops.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.protoceratops.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.protoceratops.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.protoceratops.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -305,4 +317,9 @@ public class ProtoceratopsEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.PROTOCERATOPS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.PROTOCERATOPS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/PteranodonEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/PteranodonEntity.java index 1700a7d..7946ada 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/PteranodonEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/PteranodonEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class PteranodonEntity extends Animal implements GeoEntity, FlyingAnimal { +public class PteranodonEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,95 +75,44 @@ public class PteranodonEntity extends Animal implements GeoEntity, FlyingAnimal public PteranodonEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.PISCIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return PteranodonEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return PteranodonEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !PteranodonEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || PteranodonEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = PteranodonEntity.this.position(); - RandomSource random = PteranodonEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_PTERANODON_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = PteranodonEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (PteranodonEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -196,10 +150,6 @@ public class PteranodonEntity extends Animal implements GeoEntity, FlyingAnimal protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -226,7 +176,7 @@ public class PteranodonEntity extends Animal implements GeoEntity, FlyingAnimal @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!PteranodonEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.pteranodon.fly", Animation.LoopType.LOOP)); } @@ -237,10 +187,10 @@ public class PteranodonEntity extends Animal implements GeoEntity, FlyingAnimal return state.setAndContinue(RawAnimation.begin().then("anim.pteranodon.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.pteranodon.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.pteranodon.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -408,4 +358,9 @@ public class PteranodonEntity extends Animal implements GeoEntity, FlyingAnimal protected @Nullable SoundEvent getDeathSound() { return ModSounds.PTERANODON_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.PTERANODON_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/PterodaustroEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/PterodaustroEntity.java index 636065d..94c636d 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/PterodaustroEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/PterodaustroEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class PterodaustroEntity extends Animal implements GeoEntity, FlyingAnimal { +public class PterodaustroEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,95 +75,44 @@ public class PterodaustroEntity extends Animal implements GeoEntity, FlyingAnima public PterodaustroEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.PISCIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return PterodaustroEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return PterodaustroEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !PterodaustroEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || PterodaustroEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = PterodaustroEntity.this.position(); - RandomSource random = PterodaustroEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_PTERODAUSTRO_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = PterodaustroEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (PterodaustroEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -196,10 +150,6 @@ public class PterodaustroEntity extends Animal implements GeoEntity, FlyingAnima protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -226,7 +176,7 @@ public class PterodaustroEntity extends Animal implements GeoEntity, FlyingAnima @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!PterodaustroEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.pterodaustro.fly", Animation.LoopType.LOOP)); } @@ -237,10 +187,10 @@ public class PterodaustroEntity extends Animal implements GeoEntity, FlyingAnima return state.setAndContinue(RawAnimation.begin().then("anim.pterodaustro.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.pterodaustro.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.pterodaustro.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -408,4 +358,9 @@ public class PterodaustroEntity extends Animal implements GeoEntity, FlyingAnima protected @Nullable SoundEvent getDeathSound() { return ModSounds.PTERODAUSTRO_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.PTERODAUSTRO_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/QuetzalcoatlusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/QuetzalcoatlusEntity.java index ee895ad..db7721d 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/QuetzalcoatlusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/QuetzalcoatlusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class QuetzalcoatlusEntity extends Animal implements GeoEntity, FlyingAnimal { +public class QuetzalcoatlusEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,95 +75,44 @@ public class QuetzalcoatlusEntity extends Animal implements GeoEntity, FlyingAni public QuetzalcoatlusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return QuetzalcoatlusEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return QuetzalcoatlusEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !QuetzalcoatlusEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || QuetzalcoatlusEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = QuetzalcoatlusEntity.this.position(); - RandomSource random = QuetzalcoatlusEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_QUETZALCOATLUS_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = QuetzalcoatlusEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (QuetzalcoatlusEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -196,10 +150,6 @@ public class QuetzalcoatlusEntity extends Animal implements GeoEntity, FlyingAni protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -226,7 +176,7 @@ public class QuetzalcoatlusEntity extends Animal implements GeoEntity, FlyingAni @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!QuetzalcoatlusEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.quetzalcoatlus.fly", Animation.LoopType.LOOP)); } @@ -237,10 +187,10 @@ public class QuetzalcoatlusEntity extends Animal implements GeoEntity, FlyingAni return state.setAndContinue(RawAnimation.begin().then("anim.quetzalcoatlus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.quetzalcoatlus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.quetzalcoatlus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -408,4 +358,9 @@ public class QuetzalcoatlusEntity extends Animal implements GeoEntity, FlyingAni protected @Nullable SoundEvent getDeathSound() { return ModSounds.QUETZALCOATLUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.QUETZALCOATLUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/RajasaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/RajasaurusEntity.java index 62bdcdc..a3ae9fe 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/RajasaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/RajasaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -30,6 +34,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -46,7 +51,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class RajasaurusEntity extends Animal implements GeoEntity { +public class RajasaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -61,40 +66,44 @@ public class RajasaurusEntity extends Animal implements GeoEntity { public RajasaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return RajasaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(9, new FollowMobGoal(this, 1.2, (float) 20, (float) 10)); - this.targetSelector.addGoal(10, new NearestAttackableTargetGoal<>(this, Monster.class, true)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, SpinosaurusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, IndominusRexEntity.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + @Override + public boolean isMarine() { + return false; + } + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_RAJASAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -108,10 +117,6 @@ public class RajasaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 14D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -138,17 +143,17 @@ public class RajasaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(RajasaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.rajasaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.rajasaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.rajasaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.rajasaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.rajasaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -315,4 +320,9 @@ public class RajasaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.RAJASAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.RAJASAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/RugopsEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/RugopsEntity.java index 7512670..fcfaf6b 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/RugopsEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/RugopsEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -30,6 +34,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -46,7 +51,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class RugopsEntity extends Animal implements GeoEntity { +public class RugopsEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -61,40 +66,44 @@ public class RugopsEntity extends Animal implements GeoEntity { public RugopsEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return RugopsEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(9, new FollowMobGoal(this, 1.2, (float) 20, (float) 10)); - this.targetSelector.addGoal(10, new NearestAttackableTargetGoal<>(this, Monster.class, true)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, SpinosaurusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, IndominusRexEntity.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + @Override + public boolean isMarine() { + return false; + } + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_RUGOPS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -108,10 +117,6 @@ public class RugopsEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 14D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -138,17 +143,17 @@ public class RugopsEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(RugopsEntity.this.isSprinting() ? RawAnimation.begin().then("anim.rugops.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.rugops.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.rugops.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.rugops.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.rugops.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -315,4 +320,9 @@ public class RugopsEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.RUGOPS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.RUGOPS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/SegisaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/SegisaurusEntity.java index 26cbb0f..16b756b 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/SegisaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/SegisaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class SegisaurusEntity extends Animal implements GeoEntity { +public class SegisaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,37 +65,44 @@ public class SegisaurusEntity extends Animal implements GeoEntity { public SegisaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return SegisaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, ParasaurolophusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(10, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(11, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(12, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(13, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(14, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(15, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(20, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_SEGISAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -104,10 +116,6 @@ public class SegisaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 2D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -133,17 +141,17 @@ public class SegisaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(SegisaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.segisaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.segisaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.segisaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.segisaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.segisaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -310,4 +318,9 @@ public class SegisaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.SEGISAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.SEGISAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ShantungosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ShantungosaurusEntity.java index 1f6afb8..1744a7f 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ShantungosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ShantungosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; import net.cmr.jurassicrevived.entity.client.ShantungosaurusVariant; @@ -26,6 +30,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -42,7 +47,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class ShantungosaurusEntity extends Animal implements GeoEntity { +public class ShantungosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -57,24 +62,44 @@ public class ShantungosaurusEntity extends Animal implements GeoEntity { public ShantungosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.ORNITHOPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15)); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(7, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(8, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(10, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(11, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(13, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_SHANTUNGOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -88,10 +113,6 @@ public class ShantungosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 12D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -117,17 +138,17 @@ public class ShantungosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(ShantungosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.shantungosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.shantungosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.shantungosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.shantungosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.shantungosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -294,4 +315,9 @@ public class ShantungosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.SHANTUNGOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.SHANTUNGOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/SpinosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/SpinosaurusEntity.java index c8f4361..286e42d 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/SpinosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/SpinosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class SpinosaurusEntity extends Animal implements GeoEntity { +public class SpinosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,38 +65,44 @@ public class SpinosaurusEntity extends Animal implements GeoEntity { public SpinosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.PISCIVORE, + IDinoData.Type.AMPHIBIOUS, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return SpinosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.targetSelector.addGoal(9, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(10, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, TyrannosaurusRexEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, IndominusRexEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(19, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + @Override + public boolean isMarine() { + return false; + } + @Override + public boolean isAmphibious() { + return true; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_SPINOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -105,10 +116,6 @@ public class SpinosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 20D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -135,17 +142,17 @@ public class SpinosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(SpinosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.spinosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.spinosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.spinosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.spinosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.spinosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -312,4 +319,9 @@ public class SpinosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.SPINOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.SPINOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/StegosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/StegosaurusEntity.java index 2a3ab6f..8ef2381 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/StegosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/StegosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -28,6 +32,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -44,7 +49,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class StegosaurusEntity extends Animal implements GeoEntity { +public class StegosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -59,33 +64,44 @@ public class StegosaurusEntity extends Animal implements GeoEntity { public StegosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THYREOPHORAN, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return StegosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(6, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(7, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(8, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(11, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(13, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(14, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(15, new EatBlockGoal(this)); - this.goalSelector.addGoal(16, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_STEGOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -99,10 +115,6 @@ public class StegosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 16D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -129,17 +141,17 @@ public class StegosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(StegosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.stegosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.stegosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.stegosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.stegosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.stegosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -306,4 +318,9 @@ public class StegosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.STEGOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.STEGOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/StyracosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/StyracosaurusEntity.java index 06186ef..6dc01ff 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/StyracosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/StyracosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -28,6 +32,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -44,7 +49,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class StyracosaurusEntity extends Animal implements GeoEntity { +public class StyracosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -59,33 +64,44 @@ public class StyracosaurusEntity extends Animal implements GeoEntity { public StyracosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.CERAPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return StyracosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(6, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(7, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(8, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(11, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(13, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(14, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(15, new EatBlockGoal(this)); - this.goalSelector.addGoal(16, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_STYRACOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -99,10 +115,6 @@ public class StyracosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 14D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -128,17 +140,17 @@ public class StyracosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(StyracosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.styracosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.styracosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.styracosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.styracosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.styracosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -305,4 +317,9 @@ public class StyracosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.STYRACOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.STYRACOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TapejaraEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TapejaraEntity.java index 079d2de..3691460 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TapejaraEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TapejaraEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class TapejaraEntity extends Animal implements GeoEntity, FlyingAnimal { +public class TapejaraEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,95 +75,44 @@ public class TapejaraEntity extends Animal implements GeoEntity, FlyingAnimal { public TapejaraEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return TapejaraEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return TapejaraEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !TapejaraEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || TapejaraEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = TapejaraEntity.this.position(); - RandomSource random = TapejaraEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_TAPEJARA_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = TapejaraEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (TapejaraEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -196,10 +150,6 @@ public class TapejaraEntity extends Animal implements GeoEntity, FlyingAnimal { protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -226,7 +176,7 @@ public class TapejaraEntity extends Animal implements GeoEntity, FlyingAnimal { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!TapejaraEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.tapejara.fly", Animation.LoopType.LOOP)); } @@ -237,10 +187,10 @@ public class TapejaraEntity extends Animal implements GeoEntity, FlyingAnimal { return state.setAndContinue(RawAnimation.begin().then("anim.tapejara.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.tapejara.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.tapejara.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -408,4 +358,9 @@ public class TapejaraEntity extends Animal implements GeoEntity, FlyingAnimal { protected @Nullable SoundEvent getDeathSound() { return ModSounds.TAPEJARA_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.TAPEJARA_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TherizinosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TherizinosaurusEntity.java index 2de6aa5..cff0d4a 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TherizinosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TherizinosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -28,6 +32,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -44,7 +49,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class TherizinosaurusEntity extends Animal implements GeoEntity { +public class TherizinosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -59,33 +64,44 @@ public class TherizinosaurusEntity extends Animal implements GeoEntity { public TherizinosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return TherizinosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(6, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(7, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(8, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(11, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(13, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(14, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(15, new EatBlockGoal(this)); - this.goalSelector.addGoal(16, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_THERIZINOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -99,10 +115,6 @@ public class TherizinosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 18D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -129,17 +141,17 @@ public class TherizinosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(TherizinosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.therizinosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.therizinosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.therizinosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.therizinosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.therizinosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -306,4 +318,9 @@ public class TherizinosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.THERIZINOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.THERIZINOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TitanosaurusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TitanosaurusEntity.java index b763e81..b24106e 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TitanosaurusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TitanosaurusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; @@ -46,7 +51,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class TitanosaurusEntity extends Animal implements GeoEntity { +public class TitanosaurusEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -61,31 +66,44 @@ public class TitanosaurusEntity extends Animal implements GeoEntity { public TitanosaurusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.SAUROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return TitanosaurusEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(9, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(9, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(10, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(11, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(12, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.goalSelector.addGoal(13, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_TITANOSAURUS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -99,10 +117,6 @@ public class TitanosaurusEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 30D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -129,17 +143,17 @@ public class TitanosaurusEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(TitanosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.titanosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.titanosaurus.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.titanosaurus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.titanosaurus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.titanosaurus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -312,4 +326,9 @@ public class TitanosaurusEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.TITANOSAURUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.TITANOSAURUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TriceratopsEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TriceratopsEntity.java index d418f90..979d33d 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TriceratopsEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TriceratopsEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -28,6 +32,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -44,7 +49,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class TriceratopsEntity extends Animal implements GeoEntity { +public class TriceratopsEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -59,32 +64,44 @@ public class TriceratopsEntity extends Animal implements GeoEntity { public TriceratopsEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.HERBIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.CERAPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() {this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return TriceratopsEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, VelociraptorEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, CeratosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, DilophosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(6, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(7, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(8, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(11, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.goalSelector.addGoal(12, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(13, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(14, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 0.8, 0.8)); - this.goalSelector.addGoal(15, new EatBlockGoal(this)); - this.goalSelector.addGoal(16, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return false; + } + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_TRICERATOPS_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -98,10 +115,6 @@ public class TriceratopsEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 16D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.KELP); - } @Nullable @Override @@ -127,17 +140,17 @@ public class TriceratopsEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(TriceratopsEntity.this.isSprinting() ? RawAnimation.begin().then("anim.triceratops.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.triceratops.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.triceratops.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.triceratops.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.triceratops.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -304,4 +317,9 @@ public class TriceratopsEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.TRICERATOPS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.TRICERATOPS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TroodonEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TroodonEntity.java index 55c8269..c3d48ab 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TroodonEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TroodonEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class TroodonEntity extends Animal implements GeoEntity { +public class TroodonEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,38 +65,44 @@ public class TroodonEntity extends Animal implements GeoEntity { public TroodonEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.SCAVENGER, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return TroodonEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(9, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(10, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(11, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(12, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(13, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_TROODON_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -105,10 +116,6 @@ public class TroodonEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_KNOCKBACK, 0D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -134,17 +141,17 @@ public class TroodonEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(TroodonEntity.this.isSprinting() ? RawAnimation.begin().then("anim.troodon.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.troodon.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.troodon.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.troodon.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.troodon.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -311,4 +318,9 @@ public class TroodonEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.TROODON_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.TROODON_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TropeognathusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TropeognathusEntity.java index 1a07680..76b0eb4 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TropeognathusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TropeognathusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class TropeognathusEntity extends Animal implements GeoEntity, FlyingAnimal { +public class TropeognathusEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,95 +75,44 @@ public class TropeognathusEntity extends Animal implements GeoEntity, FlyingAnim public TropeognathusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.PISCIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return TropeognathusEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return TropeognathusEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !TropeognathusEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || TropeognathusEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = TropeognathusEntity.this.position(); - RandomSource random = TropeognathusEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_TROPEOGNATHUS_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = TropeognathusEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (TropeognathusEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -196,10 +150,6 @@ public class TropeognathusEntity extends Animal implements GeoEntity, FlyingAnim protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -226,7 +176,7 @@ public class TropeognathusEntity extends Animal implements GeoEntity, FlyingAnim @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!TropeognathusEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.tropeognathus.fly", Animation.LoopType.LOOP)); } @@ -237,10 +187,10 @@ public class TropeognathusEntity extends Animal implements GeoEntity, FlyingAnim return state.setAndContinue(RawAnimation.begin().then("anim.tropeognathus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.tropeognathus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.tropeognathus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -408,4 +358,9 @@ public class TropeognathusEntity extends Animal implements GeoEntity, FlyingAnim protected @Nullable SoundEvent getDeathSound() { return ModSounds.TROPEOGNATHUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.TROPEOGNATHUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TupuxuaraEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TupuxuaraEntity.java index 75a8e32..0b7d62e 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TupuxuaraEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TupuxuaraEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class TupuxuaraEntity extends Animal implements GeoEntity, FlyingAnimal { +public class TupuxuaraEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,95 +75,44 @@ public class TupuxuaraEntity extends Animal implements GeoEntity, FlyingAnimal { public TupuxuaraEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.PISCIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return TupuxuaraEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return TupuxuaraEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !TupuxuaraEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || TupuxuaraEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = TupuxuaraEntity.this.position(); - RandomSource random = TupuxuaraEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_TUPUXUARA_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = TupuxuaraEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (TupuxuaraEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -196,10 +150,6 @@ public class TupuxuaraEntity extends Animal implements GeoEntity, FlyingAnimal { protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -226,7 +176,7 @@ public class TupuxuaraEntity extends Animal implements GeoEntity, FlyingAnimal { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!TupuxuaraEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.tupuxuara.fly", Animation.LoopType.LOOP)); } @@ -237,10 +187,10 @@ public class TupuxuaraEntity extends Animal implements GeoEntity, FlyingAnimal { return state.setAndContinue(RawAnimation.begin().then("anim.tupuxuara.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.tupuxuara.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.tupuxuara.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -408,4 +358,9 @@ public class TupuxuaraEntity extends Animal implements GeoEntity, FlyingAnimal { protected @Nullable SoundEvent getDeathSound() { return ModSounds.TUPUXUARA_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.TUPUXUARA_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TyrannosaurusRexEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TyrannosaurusRexEntity.java index 516808b..18340a7 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TyrannosaurusRexEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/TyrannosaurusRexEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -31,6 +35,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; @@ -48,7 +53,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class TyrannosaurusRexEntity extends Animal implements GeoEntity { +public class TyrannosaurusRexEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -63,40 +68,44 @@ public class TyrannosaurusRexEntity extends Animal implements GeoEntity { public TyrannosaurusRexEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return TyrannosaurusRexEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(9, new FollowMobGoal(this, 1.2, (float) 20, (float) 10)); - this.targetSelector.addGoal(10, new NearestAttackableTargetGoal<>(this, Monster.class, true)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal(this, TriceratopsEntity.class, false, false)); - this.targetSelector.addGoal(13, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, VelociraptorEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, SpinosaurusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, IndominusRexEntity.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + @Override + public boolean isMarine() { + return false; + } + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_TYRANNOSAURUS_REX_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -110,10 +119,6 @@ public class TyrannosaurusRexEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 20D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -140,17 +145,17 @@ public class TyrannosaurusRexEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(TyrannosaurusRexEntity.this.isSprinting() ? RawAnimation.begin().then("anim.tyrannosaurus_rex.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.tyrannosaurus_rex.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.tyrannosaurus_rex.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.tyrannosaurus_rex.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.tyrannosaurus_rex.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -322,4 +327,9 @@ public class TyrannosaurusRexEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.TYRANNOSAURUS_REX_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.TYRANNOSAURUS_REX_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/UtahraptorEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/UtahraptorEntity.java index 0d8b84b..c0caec7 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/UtahraptorEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/UtahraptorEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.AlbertosaurusVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -44,7 +49,7 @@ import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceCache; import software.bernie.geckolib.animation.*; *//*?}*/ -public class UtahraptorEntity extends Animal implements GeoEntity { +public class UtahraptorEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -59,38 +64,44 @@ public class UtahraptorEntity extends Animal implements GeoEntity { public UtahraptorEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return UtahraptorEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(9, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(10, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(11, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(12, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(13, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_UTAHRAPTOR_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -104,10 +115,6 @@ public class UtahraptorEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_KNOCKBACK, 0D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -133,17 +140,17 @@ public class UtahraptorEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(UtahraptorEntity.this.isSprinting() ? RawAnimation.begin().then("anim.utahraptor.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.utahraptor.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.utahraptor.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.utahraptor.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.utahraptor.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -310,4 +317,9 @@ public class UtahraptorEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.UTAHRAPTOR_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.UTAHRAPTOR_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/VelociraptorEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/VelociraptorEntity.java index afec321..e7bb399 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/VelociraptorEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/VelociraptorEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.VelociraptorVariant; @@ -29,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; /*? if <=1.20.1 {*/ @@ -45,7 +50,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class VelociraptorEntity extends Animal implements GeoEntity { +public class VelociraptorEntity extends DinoEntityBase implements GeoEntity { private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -60,38 +65,44 @@ public class VelociraptorEntity extends Animal implements GeoEntity { public VelociraptorEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.CARNIVORE, + IDinoData.Type.TERRESTRIAL, + IDinoData.Group.THEROPOD, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return VelociraptorEntity.this.isBaby() && super.canUse(); - } - }); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, TriceratopsEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new AvoidEntityGoal<>(this, SpinosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(5, new AvoidEntityGoal<>(this, TyrannosaurusRexEntity.class, (float) 20, 1.2, 1.2)); - this.goalSelector.addGoal(6, new AvoidEntityGoal<>(this, IndominusRexEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(7, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(8, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(9, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(10, new FollowParentGoal(this, 1.25)); - this.goalSelector.addGoal(11, new WaterAvoidingRandomStrollGoal(this, 1.0)); - this.goalSelector.addGoal(12, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(13, new FollowMobGoal(this, 1, (float) 20, (float) 10)); - this.targetSelector.addGoal(14, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> target.getType() != this.getType())); - this.targetSelector.addGoal(15, new NearestAttackableTargetGoal(this, GallimimusEntity.class, false, false)); - this.targetSelector.addGoal(16, new NearestAttackableTargetGoal(this, DilophosaurusEntity.class, false, false)); - this.targetSelector.addGoal(17, new NearestAttackableTargetGoal(this, CeratosaurusEntity.class, false, false)); - this.targetSelector.addGoal(18, new NearestAttackableTargetGoal(this, ParasaurolophusEntity.class, false, false)); - this.targetSelector.addGoal(19, new NearestAttackableTargetGoal(this, Player.class, false, false)); - this.targetSelector.addGoal(20, new NearestAttackableTargetGoal(this, CompsognathusEntity.class, false, false)); - this.goalSelector.addGoal(21, new RandomLookAroundGoal(this)); + public boolean isCarnivore() { + return true; + } + + @Override + public boolean isMarine() { + return false; + } + + @Override + public boolean isAmphibious() { + return false; + } + + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_VELOCIRAPTOR_EGG.get(); + } + + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -105,10 +116,6 @@ public class VelociraptorEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_KNOCKBACK, 0D); } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -135,17 +142,17 @@ public class VelociraptorEntity extends Animal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (state.isMoving()) return state.setAndContinue(VelociraptorEntity.this.isSprinting() ? RawAnimation.begin().then("anim.velociraptor.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.velociraptor.walk", Animation.LoopType.LOOP)); return state.setAndContinue(RawAnimation.begin().then("anim.velociraptor.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.velociraptor.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.velociraptor.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -312,4 +319,9 @@ public class VelociraptorEntity extends Animal implements GeoEntity { protected @Nullable SoundEvent getDeathSound() { return ModSounds.VELOCIRAPTOR_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.VELOCIRAPTOR_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ZhenyuanopterusEntity.java b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ZhenyuanopterusEntity.java index 7ef2ac6..6755dbf 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ZhenyuanopterusEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/custom/ZhenyuanopterusEntity.java @@ -1,6 +1,10 @@ package net.cmr.jurassicrevived.entity.custom; +import net.cmr.jurassicrevived.block.ModBlocks; import net.cmr.jurassicrevived.entity.ModEntities; +import net.cmr.jurassicrevived.entity.ai.DinoData; +import net.cmr.jurassicrevived.entity.ai.DinoEntityBase; +import net.cmr.jurassicrevived.entity.ai.IDinoData; import net.cmr.jurassicrevived.entity.ai.SprintingMeleeAttackGoal; import net.cmr.jurassicrevived.entity.ai.SprintingPanicGoal; import net.cmr.jurassicrevived.entity.client.ZhenyuanopterusVariant; @@ -35,6 +39,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; @@ -54,7 +59,7 @@ import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceC import software.bernie.geckolib.animation.*; *//*?}*/ -public class ZhenyuanopterusEntity extends Animal implements GeoEntity, FlyingAnimal { +public class ZhenyuanopterusEntity extends DinoEntityBase implements GeoEntity, FlyingAnimal { private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this); private static final EntityDataAccessor VARIANT = @@ -70,95 +75,44 @@ public class ZhenyuanopterusEntity extends Animal implements GeoEntity, FlyingAn public ZhenyuanopterusEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.moveControl = new FlyingMoveControl(this, 20, true); + + this.dinoData = new DinoData( + getAIConfig().maxHunger(), + getAIConfig().maxThirst(), + IDinoData.Mood.NEUTRAL, + IDinoData.Aggression.TERRITORIAL, + 0.75f, + IDinoData.DietaryClassification.PISCIVORE, + IDinoData.Type.AVIAN, + IDinoData.Group.PTEROSAUR, + IDinoData.BirthType.EGG_LAYING, + IDinoData.ActivityPattern.CATHEMERAL + ); } @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SprintingPanicGoal(this, 1.15) { - @Override - public boolean canUse() { - return ZhenyuanopterusEntity.this.isBaby() && super.canUse(); - } - }); - this.goalSelector.addGoal(2, new FloatGoal(this)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, BrachiosaurusEntity.class, (float) 20, 1, 1)); - this.goalSelector.addGoal(4, new SprintingMeleeAttackGoal(this, 1.1, false)); - this.goalSelector.addGoal(5, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); + public boolean isCarnivore() { + return true; + } - // Goal 7: Wander on ground (Walk) - Only when on ground - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0) { - @Override - public boolean canUse() { - return ZhenyuanopterusEntity.this.onGround() && super.canUse(); - } - }); + @Override + public boolean isMarine() { + return false; + } - // Goal 8: Wander in air (Fly) - Handles takeoff, flying, and landing - this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0, 20) { - @Override - public boolean canUse() { - boolean isFlying = !ZhenyuanopterusEntity.this.onGround(); - // If flying, keep flying. If on ground, small chance (1/400 ticks) to take off. - return (isFlying || ZhenyuanopterusEntity.this.getRandom().nextInt(400) == 0) && super.canUse(); - } + @Override + public boolean isAmphibious() { + return false; + } - @Override - protected Vec3 getPosition() { - Vec3 pos = ZhenyuanopterusEntity.this.position(); - RandomSource random = ZhenyuanopterusEntity.this.getRandom(); + @Override + public Block getEggBlock() { + return ModBlocks.INCUBATED_ZHENYUANOPTERUS_EGG.get(); + } - double x = pos.x + (random.nextFloat() * 2 - 1) * 32; - double z = pos.z + (random.nextFloat() * 2 - 1) * 32; - - // Get ground height at the random destination (returns Y of first air block) - int groundY = ZhenyuanopterusEntity.this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, (int)x, (int)z); - double y; - - if (ZhenyuanopterusEntity.this.onGround()) { - // Takeoff: Target well above ground to ensure liftoff - y = pos.y + 15 + random.nextInt(10); - } else { - // Flying: 5% chance to land, otherwise stay airborne but capped height - if (random.nextFloat() < 0.05f) { - y = groundY; // Land - } else if (pos.y > groundY + 20) { - // Too high: Force descent - y = pos.y - 5 - random.nextInt(10); - } else { - // Just wander up or down a bit - y = pos.y + (random.nextFloat() * 2 - 1) * 10; - } - } - - // Don't target below the ground (blocks) - if (y < groundY) y = groundY; - - return new Vec3(x, y, z); - } - }); - - this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(10, new FollowMobGoal(this, 0.8, (float) 20, (float) 10)); - this.targetSelector.addGoal(11, new NearestAttackableTargetGoal<>(this, Animal.class, 10, false, false, - target -> { - // 1. Don't eat your own species - if (target.getType() == this.getType()) return false; - - // 2. Don't eat Flying Animals - if (target instanceof FlyingAnimal) return false; - - // 3. SIZE CHECK: specific height and width limits - // Example: Height < 1.0 blocks AND Width < 1.0 blocks - boolean isSmallEnough = target.getBbHeight() <= 1.0F && target.getBbWidth() <= 1.0F; - - return isSmallEnough; - } - )); - this.targetSelector.addGoal(12, new NearestAttackableTargetGoal<>(this, Player.class, false, false)); - this.targetSelector.addGoal(13, new HurtByTargetGoal(this)); - this.goalSelector.addGoal(14, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(15, new FloatGoal(this)); + @Override + public DinoAIConfig getAIConfig() { + return new DinoAIConfig(0.3D, 1.1D, 1.5D, 100, 100, 0.05f, 0.1f, 20); } public static AttributeSupplier.Builder createAttributes() { @@ -196,10 +150,6 @@ public class ZhenyuanopterusEntity extends Animal implements GeoEntity, FlyingAn protected void checkFallDamage(double pY, boolean pOnGround, BlockState pState, BlockPos pPos) { } - @Override - public boolean isFood(ItemStack pStack) { - return pStack.is(Items.BEEF); - } @Nullable @Override @@ -226,7 +176,7 @@ public class ZhenyuanopterusEntity extends Animal implements GeoEntity, FlyingAn @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "Walk/Run/Idle", state -> { + controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> { if (!ZhenyuanopterusEntity.this.onGround()) { return state.setAndContinue(RawAnimation.begin().then("anim.zhenyuanopterus.fly", Animation.LoopType.LOOP)); } @@ -237,10 +187,10 @@ public class ZhenyuanopterusEntity extends Animal implements GeoEntity, FlyingAn return state.setAndContinue(RawAnimation.begin().then("anim.zhenyuanopterus.idle", Animation.LoopType.LOOP)); })); - controllers.add(new AnimationController<>(this, "attackController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP) .triggerableAnim("attack", RawAnimation.begin().then("anim.zhenyuanopterus.attack", Animation.LoopType.PLAY_ONCE))); - controllers.add(new AnimationController<>(this, "mouthController", state -> PlayState.STOP) + controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP) .triggerableAnim("mouth", RawAnimation.begin().then("anim.zhenyuanopterus.mouth", Animation.LoopType.PLAY_ONCE))); } @@ -408,4 +358,9 @@ public class ZhenyuanopterusEntity extends Animal implements GeoEntity, FlyingAn protected @Nullable SoundEvent getDeathSound() { return ModSounds.ZHENYUANOPTERUS_DEATH.get(); } + + @Override + protected @Nullable SoundEvent getAmbientSound() { + return ModSounds.ZHENYUANOPTERUS_CALL.get(); + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/item/custom/CustomGenderedSpawnEggItem.java b/common/src/main/java/net/cmr/jurassicrevived/item/custom/CustomGenderedSpawnEggItem.java index 8ddecbc..45652f2 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/item/custom/CustomGenderedSpawnEggItem.java +++ b/common/src/main/java/net/cmr/jurassicrevived/item/custom/CustomGenderedSpawnEggItem.java @@ -11,6 +11,9 @@ import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.player.Player; +//? if >1.20.1 { +/*import net.minecraft.core.registries.BuiltInRegistries; +*///?} import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.SpawnEggItem; import net.minecraft.world.item.TooltipFlag; @@ -42,17 +45,21 @@ public class CustomGenderedSpawnEggItem extends SpawnEggItem { int backgroundColor, int highlightColor, Item.Properties properties) { - //? if >1.20.1 { - /*super(EntityType.PIG, backgroundColor, highlightColor, properties); - *///?} else { super(EntityType.PIG, backgroundColor, highlightColor, properties); - //?} this.typeSupplier = type; } + //? if >1.20.1 { + /*@Override + public EntityType getType(ItemStack stack) { + return typeSupplier.get(); + } + *///?} else { + @Override public EntityType getType(@Nullable CompoundTag nbt) { return typeSupplier.get(); } + //?} private static int getSelectedVariant(ItemStack stack) { //? if >1.20.1 { @@ -85,11 +92,12 @@ public class CustomGenderedSpawnEggItem extends SpawnEggItem { setSelectedVariant(stack, (getSelectedVariant(stack) + 1) % VARIANT_COUNT); } - private static void ensureEntityDataHasVariant(ItemStack stack) { + private void ensureEntityDataHasVariant(ItemStack stack) { final int variant = getSelectedVariant(stack); //? if >1.20.1 { /*stack.update(DataComponents.ENTITY_DATA, CustomData.EMPTY, existing -> { CompoundTag tag = existing.copyTag(); + tag.putString("id", BuiltInRegistries.ENTITY_TYPE.getKey(typeSupplier.get()).toString()); tag.putInt(KEY_VARIANT, variant); return CustomData.of(tag); }); diff --git a/common/src/main/resources/assets/jurassicrevived/animations/arambourgiania.animation.json b/common/src/main/resources/assets/jurassicrevived/animations/arambourgiania.animation.json index 81b7a11..4401b6a 100755 --- a/common/src/main/resources/assets/jurassicrevived/animations/arambourgiania.animation.json +++ b/common/src/main/resources/assets/jurassicrevived/animations/arambourgiania.animation.json @@ -2141,6 +2141,5 @@ } } } - }, - "geckolib_format_version": 2 + } } \ No newline at end of file diff --git a/common/src/main/resources/assets/jurassicrevived/animations/compsognathus.animation.json b/common/src/main/resources/assets/jurassicrevived/animations/compsognathus.animation.json index e75f383..a483092 100755 --- a/common/src/main/resources/assets/jurassicrevived/animations/compsognathus.animation.json +++ b/common/src/main/resources/assets/jurassicrevived/animations/compsognathus.animation.json @@ -1,1297 +1,6 @@ { "format_version": "1.8.0", "animations": { - "anim.compsognathus.walk": { - "loop": true, - "animation_length": 0.75, - "bones": { - "Body": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Chest": { - "rotation": { - "0.0": { - "vector": [5, 0, 0] - }, - "0.1667": { - "pre": { - "vector": [-10, 0, 0] - }, - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "vector": [5, 0, 0] - } - } - }, - "NeckFlap": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "LeftShoulder": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "RightShoulder": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "LeftLeg": { - "rotation": { - "0.0": { - "vector": [-2.5, 0, 0] - }, - "0.1667": { - "pre": { - "vector": [22.5, 0, 0] - }, - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "vector": [-2.5, 0, 0] - } - } - }, - "LeftKnee": { - "rotation": { - "0.0": { - "vector": [12.5, 0, 0] - }, - "0.1667": { - "pre": { - "vector": [22.5, 0, 0] - }, - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "vector": [12.5, 0, 0] - } - } - }, - "RightLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "RightKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "root": { - "position": { - "0.0": { - "vector": [0, 3, -1] - }, - "0.1667": { - "pre": { - "vector": [0, 6, -2] - }, - "post": { - "vector": [0, 6, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "vector": [0, 3, -1] - } - } - }, - "Tail1": { - "rotation": { - "0.0": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "vector": [0, -0.1, 0] - } - }, - "Tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "vector": [0, -0.2, 0] - } - }, - "Tail3": { - "rotation": { - "0.0": { - "vector": [6.46, 0, 0] - }, - "0.1667": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "vector": [6.46, 0, 0] - } - } - }, - "Tail4": { - "rotation": { - "0.0": { - "vector": [6.46, 0, 0] - }, - "0.1667": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "vector": [6.46, 0, 0] - } - } - }, - "Neck1": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Head": { - "rotation": { - "0.0": { - "vector": [6.46, 0, 0] - }, - "0.1667": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "vector": [6.46, 0, 0] - } - } - }, - "Rightarm": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Leftarm": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Leftthigh": { - "rotation": { - "0.0": { - "vector": [-2.5, 0, 0] - }, - "0.1667": { - "pre": { - "vector": [22.5, 0, 0] - }, - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "vector": [-2.5, 0, 0] - } - } - }, - "Leftmidleg": { - "rotation": { - "0.0": { - "vector": [12.5, 0, 0] - }, - "0.1667": { - "pre": { - "vector": [22.5, 0, 0] - }, - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "vector": [12.5, 0, 0] - } - } - }, - "Leftshin": { - "rotation": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Leftfoot": { - "rotation": { - "0.1667": { - "pre": { - "vector": [45, 0, 0] - }, - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Rightthigh": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Rightmidleg": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Rightshin": { - "rotation": { - "0.375": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Rightfoot": { - "rotation": { - "0.375": { - "pre": { - "vector": [45, 0, 0] - }, - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "anim.compsognathus.run": { - "loop": true, - "animation_length": 0.5, - "bones": { - "Body": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Chest": { - "rotation": { - "0.0": { - "vector": [5, 0, 0] - }, - "0.1111": { - "pre": { - "vector": [-10, 0, 0] - }, - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3611": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [5, 0, 0] - } - } - }, - "NeckFlap": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "LeftShoulder": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "RightShoulder": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "LeftLeg": { - "rotation": { - "0.0": { - "vector": [-2.5, 0, 0] - }, - "0.1111": { - "pre": { - "vector": [22.5, 0, 0] - }, - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3611": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [-2.5, 0, 0] - } - } - }, - "LeftKnee": { - "rotation": { - "0.0": { - "vector": [12.5, 0, 0] - }, - "0.1111": { - "pre": { - "vector": [22.5, 0, 0] - }, - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3611": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [12.5, 0, 0] - } - } - }, - "RightLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "RightKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "root": { - "position": { - "0.0": { - "vector": [0, 3, -1] - }, - "0.1111": { - "pre": { - "vector": [0, 6, -2] - }, - "post": { - "vector": [0, 6, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.3611": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [0, 3, -1] - } - } - }, - "Tail1": { - "rotation": { - "0.0": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "vector": [0, -0.1, 0] - } - }, - "Tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "vector": [0, -0.2, 0] - } - }, - "Tail3": { - "rotation": { - "0.0": { - "vector": [6.46, 0, 0] - }, - "0.1111": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3611": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [6.46, 0, 0] - } - } - }, - "Tail4": { - "rotation": { - "0.0": { - "vector": [6.46, 0, 0] - }, - "0.1111": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3611": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [6.46, 0, 0] - } - } - }, - "Neck1": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Head": { - "rotation": { - "0.0": { - "vector": [6.46, 0, 0] - }, - "0.1111": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3611": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [6.46, 0, 0] - } - } - }, - "Rightarm": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Leftarm": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Leftthigh": { - "rotation": { - "0.0": { - "vector": [-2.5, 0, 0] - }, - "0.1111": { - "pre": { - "vector": [22.5, 0, 0] - }, - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3611": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [-2.5, 0, 0] - } - } - }, - "Leftmidleg": { - "rotation": { - "0.0": { - "vector": [12.5, 0, 0] - }, - "0.1111": { - "pre": { - "vector": [22.5, 0, 0] - }, - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3611": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [12.5, 0, 0] - } - } - }, - "Leftshin": { - "rotation": { - "0.1667": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2778": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Leftfoot": { - "rotation": { - "0.1111": { - "pre": { - "vector": [45, 0, 0] - }, - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2222": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3611": { - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Rightthigh": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Rightmidleg": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Rightshin": { - "rotation": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3611": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Rightfoot": { - "rotation": { - "0.25": { - "pre": { - "vector": [45, 0, 0] - }, - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3611": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "anim.compsognathus.mouth": { - "animation_length": 1, - "bones": { - "LowerJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, "anim.compsognathus.idle": { "loop": true, "animation_length": 3, @@ -1470,7 +179,7 @@ } } }, - "body3": { + "abdomen": { "rotation": { "0.0": { "post": { @@ -1492,41 +201,7 @@ } } }, - "body2": { - "rotation": { - "0.0": { - "post": { - "vector": [1.88, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [1.88, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.4583": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body1": { + "Body1": { "rotation": { "0.0": { "post": { @@ -1554,163 +229,7 @@ } } }, - "abdomen": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail1": { - "rotation": { - "0.0": { - "post": { - "vector": [-1.25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-1.25, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [-1.85, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-1.85, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail3": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.31, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-2.31, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail4": { - "rotation": { - "0.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail5": { - "rotation": { - "0.0": { - "post": { - "vector": [2.87, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [2.87, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Upperbody": { + "Body2": { "rotation": { "0.0": { "post": { @@ -1828,7 +347,7 @@ } } }, - "Rightarm": { + "LeftShoulder": { "rotation": { "0.0": { "post": { @@ -1850,7 +369,7 @@ } } }, - "Rightforearm": { + "LeftElbow": { "rotation": { "0.0": { "post": { @@ -1878,33 +397,727 @@ } } }, - "Leftarm": { + "Tail1": { "rotation": { "0.0": { "post": { - "vector": [-12.5, 0, 0] + "vector": [-1.25, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.5": { + "0.75": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, + "2.25": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, "3.0": { "post": { - "vector": [-12.5, 0, 0] + "vector": [-1.25, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Leftforearm": { + "Tail2": { "rotation": { "0.0": { "post": { - "vector": [-3.24, 0, 0] + "vector": [-1.85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-1.85, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.31, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-2.31, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail5": { + "rotation": { + "0.0": { + "post": { + "vector": [2.87, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [2.87, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail4": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Body3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "anim.compsognathus.walk": { + "loop": true, + "animation_length": 0.75, + "bones": { + "Body1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Body2": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "NeckFlap": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0.25882, -0.96593] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftShoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Root": { + "position": { + "0.0": { + "post": { + "vector": [0, 3, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 6, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 3, -1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Neck1": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [6.46, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [6.46, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [6.46, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [6.46, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftCalf": { + "rotation": { + "0.25": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftFoot": { + "rotation": { + "0.1667": { + "pre": { + "vector": [45, 0, 0] + }, + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail4": { + "rotation": { + "0.0": { + "post": { + "vector": [6.46, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [6.46, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightShoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightCalf": { + "rotation": { + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightFoot": { + "rotation": { + "0.375": { + "pre": { + "vector": [45, 0, 0] + }, + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "anim.compsognathus.run": { + "loop": true, + "animation_length": 0.5, + "bones": { + "Body1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -1913,16 +1126,545 @@ "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" - }, - "2.0": { + } + } + }, + "Body2": { + "rotation": { + "0.0": { "post": { - "vector": [-12.5, 0, 0] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "3.0": { + "0.1111": { "post": { - "vector": [-3.24, 0, 0] + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3611": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "NeckFlap": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0.25882, -0.96593] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftShoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1111": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3611": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1111": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3611": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Root": { + "position": { + "0.0": { + "post": { + "vector": [0, 3, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.1111": { + "post": { + "vector": [0, 6, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.3611": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 3, -1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Neck1": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [6.46, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1111": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3611": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.46, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [6.46, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1111": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3611": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.46, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftCalf": { + "rotation": { + "0.1667": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2778": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftFoot": { + "rotation": { + "0.1111": { + "pre": { + "vector": [45, 0, 0] + }, + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2222": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3611": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail4": { + "rotation": { + "0.0": { + "post": { + "vector": [6.46, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1111": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3611": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.46, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightShoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightCalf": { + "rotation": { + "0.25": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3611": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightFoot": { + "rotation": { + "0.25": { + "pre": { + "vector": [45, 0, 0] + }, + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3611": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "anim.compsognathus.mouth": { + "animation_length": 1, + "bones": { + "Jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } @@ -2049,106 +1791,6 @@ } } }, - "Jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2813": { - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4688": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2813": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [6.42, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5625": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body1": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2813": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, "down_jaw": { "rotation": { "0.0": { @@ -2227,6 +1869,144 @@ } } }, + "Neck7": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4688": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LowerJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2813": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4688": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Rightforearm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2813": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Leftforearm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2813": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Body1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2813": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Body2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, "Neck1": { "rotation": { "0.0": { @@ -2293,28 +2073,6 @@ } } }, - "Neck7": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4688": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, "Head": { "rotation": { "0.0": { @@ -2337,7 +2095,7 @@ } } }, - "LowerJaw": { + "Jaw": { "rotation": { "0.0": { "post": { @@ -2365,7 +2123,7 @@ } } }, - "Rightforearm": { + "NeckFlap": { "rotation": { "0.0": { "post": { @@ -2373,9 +2131,29 @@ }, "lerp_mode": "catmullrom" }, - "0.2813": { + "0.375": { "post": { - "vector": [-17.5, 0, 0] + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -0.30622, -0.86962] }, "lerp_mode": "catmullrom" }, @@ -2387,7 +2165,7 @@ } } }, - "Leftforearm": { + "Body3": { "rotation": { "0.0": { "post": { @@ -2397,7 +2175,13 @@ }, "0.2813": { "post": { - "vector": [-17.5, 0, 0] + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.42, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -2411,6 +2195,5 @@ } } } - }, - "geckolib_format_version": 2 + } } \ No newline at end of file diff --git a/common/src/main/resources/assets/jurassicrevived/animations/corythosaurus.animation.json b/common/src/main/resources/assets/jurassicrevived/animations/corythosaurus.animation.json index f782386..ca17590 100755 --- a/common/src/main/resources/assets/jurassicrevived/animations/corythosaurus.animation.json +++ b/common/src/main/resources/assets/jurassicrevived/animations/corythosaurus.animation.json @@ -1,10 +1,76 @@ { "format_version": "1.8.0", "animations": { - "anim.corythosaurus.idle": { + "animation.corythosaurus.idle": { "loop": true, "animation_length": 3, "bones": { + "Neck2": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Neck6": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-9.99972, -0.04919, -0.03902] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, "Tail1": { "rotation": { "0.0": { @@ -154,102 +220,105 @@ "lerp_mode": "catmullrom" } } - }, - "Neck2": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Neck6": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Head": { - "rotation": { - "0.0": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-9.99972, -0.04919, -0.03902] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } } } }, - "anim.corythosaurus.walk": { + "animation.corythosaurus.walk": { "loop": true, "animation_length": 2.5, "bones": { - "RightThigh": { + "LeftUpperFoot": { "rotation": { "0.0": { "post": { - "vector": [30, 0, 0] + "vector": [20, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.625": { + "0.5556": { "post": { - "vector": [-3.75, 0, 0] + "vector": [-13.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9722": { + "post": { + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, "1.25": { "post": { - "vector": [-15, 0, 0] + "vector": [17.45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5972": { + "post": { + "vector": [17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-35, 0, 0] }, "lerp_mode": "catmullrom" }, "2.5": { "post": { - "vector": [30, 0, 0] + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0.00864, -0.74995] + }, + "0.5556": { + "vector": [0, 0.4288, -0.47685] + }, + "2.5": { + "vector": [0, 0.00864, -0.74995] + } + } + }, + "FootLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5556": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9722": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5972": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [94.68, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -257,77 +326,25 @@ "position": { "0.0": { "post": { - "vector": [0, 1.96, -1] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5556": { "post": { - "vector": [0, 3, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.25": { + "0.9722": { "post": { - "vector": [0, -0.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.2222": { - "post": { - "vector": [0, 1, 0] + "vector": [0, -0.77998, -0.80102] }, "lerp_mode": "catmullrom" }, "2.5": { "post": { - "vector": [0, 1.96, -1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "RightCalf1": { - "rotation": { - "0.0": { - "post": { - "vector": [-12.07, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1389": { - "post": { - "vector": [-12.1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5556": { - "post": { - "vector": [15.33, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.8056": { - "post": { - "vector": [-3.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.2222": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-12.07, 0, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } @@ -471,6 +488,106 @@ } } }, + "Neck": { + "rotation": { + "0.0": { + "post": { + "vector": [1.46, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2778": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9028": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5278": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.1528": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1.46, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-3.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.96, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.5556": { + "post": { + "vector": [0, 3, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2222": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 1.96, -1] + }, + "lerp_mode": "catmullrom" + } + } + }, "LeftThigh": { "rotation": { "0.0": { @@ -531,239 +648,6 @@ } } }, - "LeftCalf1": { - "rotation": { - "0.0": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5556": { - "post": { - "vector": [-3.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9722": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-12.07, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3889": { - "post": { - "vector": [-12.1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.8056": { - "post": { - "vector": [15.33, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "LeftUpperFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5556": { - "post": { - "vector": [-13.75, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9722": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [17.45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5972": { - "post": { - "vector": [17, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0833": { - "post": { - "vector": [-35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "vector": [0, 0.00864, -0.74995] - }, - "0.5556": { - "vector": [0, 0.4288, -0.47685] - }, - "2.5": { - "vector": [0, 0.00864, -0.74995] - } - } - }, - "FootLeft": { - "rotation": { - "0.0": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5556": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9722": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5972": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0833": { - "post": { - "vector": [94.68, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5556": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9722": { - "post": { - "vector": [0, -0.77998, -0.80102] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Body3": { - "rotation": { - "0.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.875": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail1": { - "rotation": { - "vector": [0, "-math.sin(query.anim_time*144)* 5", "math.sin(query.anim_time*144)* 2.5"] - } - }, - "Tail2": { - "rotation": { - "vector": [0, "-math.sin(query.anim_time*144-50)* 5", 0] - } - }, - "Tail3": { - "rotation": { - "vector": [0, "-math.sin(query.anim_time*144-100)* 4", "math.sin(query.anim_time*144-50)* 2.5"] - } - }, - "Tail4": { - "rotation": { - "vector": [0, "-math.sin(query.anim_time*144-150)* 4", 0] - } - }, - "Tail5": { - "rotation": { - "vector": [0, "-math.sin(query.anim_time*144-200)* 4", "math.sin(query.anim_time*144-100)* 2.5"] - } - }, - "Tail6": { - "rotation": { - "vector": [0, "-math.sin(query.anim_time*144)* -4", 0] - } - }, "Body1": { "rotation": { "0.0": { @@ -838,41 +722,35 @@ } } }, - "Neck": { + "Body3": { "rotation": { "0.0": { "post": { - "vector": [1.46, 0, 0] + "vector": [2.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.2778": { + "0.625": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [2.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.9028": { + "1.875": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5278": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.1528": { - "post": { - "vector": [0, 0, 0] + "vector": [-2.5, 0, 0] }, "lerp_mode": "catmullrom" }, "2.5": { "post": { - "vector": [1.46, 0, 0] + "vector": [2.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1026,7 +904,7 @@ } } }, - "UpperArmLeft": { + "UpperArmRight": { "rotation": { "0.0": { "post": { @@ -1092,7 +970,7 @@ } } }, - "LowerArmLeft": { + "LowerArmRight": { "rotation": { "0.0": { "post": { @@ -1126,7 +1004,7 @@ } } }, - "LeftHand": { + "RightHand": { "rotation": { "0.0": { "post": { @@ -1160,7 +1038,7 @@ } } }, - "UpperArmRight": { + "UpperArmLeft": { "rotation": { "0.0": { "post": { @@ -1226,7 +1104,7 @@ } } }, - "LowerArmRight": { + "LowerArmLeft": { "rotation": { "0.0": { "post": { @@ -1260,7 +1138,7 @@ } } }, - "RightHand": { + "LeftHand": { "rotation": { "0.0": { "post": { @@ -1293,14 +1171,965 @@ "lerp_mode": "catmullrom" } } + }, + "Tail1": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*144)* 5", "math.sin(query.anim_time*144)* 2.5"] + } + }, + "Tail2": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*144-50)* 5", 0] + } + }, + "Tail3": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*144-100)* 4", "math.sin(query.anim_time*144-50)* 2.5"] + } + }, + "Tail4": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*144-150)* 4", 0] + } + }, + "Tail5": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*144-200)* 4", "math.sin(query.anim_time*144-100)* 2.5"] + } + }, + "Tail6": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*144)* -4", 0] + } + }, + "ThighLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-3.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.96, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.5556": { + "post": { + "vector": [0, 3, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2222": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 1.96, -1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftCalf1": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.07, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1389": { + "post": { + "vector": [-12.1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5556": { + "post": { + "vector": [15.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8056": { + "post": { + "vector": [-3.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2222": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-12.07, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftCalf2": { + "rotation": { + "0.0": { + "post": { + "vector": [17.45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3472": { + "post": { + "vector": [17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8056": { + "post": { + "vector": [-13.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2222": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [17.45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0.28, -0.57] + }, + "1.25": { + "vector": [0, 0.00864, -0.74995] + }, + "1.8056": { + "vector": [0, 0.4288, -0.47685] + }, + "2.5": { + "vector": [0, 0.28, -0.57] + } + } + }, + "LeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.41, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3472": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [94.68, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8056": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2222": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-3.41, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.72, -0.74] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8056": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2222": { + "post": { + "vector": [0, -0.77998, -0.80102] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -0.72, -0.74] + }, + "lerp_mode": "catmullrom" + } + } + }, + "ThighRight": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-3.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9722": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 1.96, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.8056": { + "post": { + "vector": [0, 3, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightCalf1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5556": { + "post": { + "vector": [-3.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9722": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-12.07, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3889": { + "post": { + "vector": [-12.1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8056": { + "post": { + "vector": [15.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightCalf2": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5556": { + "post": { + "vector": [-13.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9722": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [17.45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5972": { + "post": { + "vector": [17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0.00864, -0.74995] + }, + "0.5556": { + "vector": [0, 0.4288, -0.47685] + }, + "2.5": { + "vector": [0, 0.00864, -0.74995] + } + } + }, + "RightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5556": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9722": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5972": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [94.68, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5556": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9722": { + "post": { + "vector": [0, -0.77998, -0.80102] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } } } }, - "anim.corythosaurus.run": { + "animation.corythosaurus.run": { "loop": true, "animation_length": 0.7917, "bones": { - "RightThigh": { + "Body1": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Body3": { + "rotation": { + "0.0": { + "post": { + "vector": [8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, 0, 1] + } + }, + "Neck2": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "UpperArmRight": { + "rotation": { + "0.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 5, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 2.5, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 5, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 2.5, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 5, -2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LowerArmRight": { + "rotation": { + "0.0": { + "post": { + "vector": [-71.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-77.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-77.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-71.25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightHand": { + "rotation": { + "vector": [75, 0, 0] + }, + "position": { + "vector": [0, 1, 0] + } + }, + "UpperArmLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 5, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 2.5, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 5, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 2.5, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 5, -2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LowerArmLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [-71.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-77.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-77.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-71.25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftHand": { + "rotation": { + "vector": [75, 0, 0] + }, + "position": { + "vector": [0, 1, 0] + } + }, + "Tail1": { + "rotation": { + "vector": [7.5, "-math.sin(query.anim_time*455)* 5", "math.sin(query.anim_time*455)* 2.5"] + } + }, + "Tail2": { + "rotation": { + "vector": [7.5, "-math.sin(query.anim_time*455-50)* 5", 0] + } + }, + "Tail3": { + "rotation": { + "vector": [7.5, "-math.sin(query.anim_time*455-50)* 5", 0] + } + }, + "Tail4": { + "rotation": { + "vector": [2.5, "-math.sin(query.anim_time*455-100)* 4", "math.sin(query.anim_time*455-50)* 2.5"] + } + }, + "Tail5": { + "rotation": { + "vector": [2.5, "-math.sin(query.anim_time*455-100)* 4", "math.sin(query.anim_time*455-50)* 2.5"] + } + }, + "Tail6": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*455-150)* 4", 0] + } + }, + "Tail7": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*455-200)* 4", "math.sin(query.anim_time*455-100)* 2.5"] + } + }, + "Stomach": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, -0.4, 0.9] + } + }, + "ThighLeft": { "rotation": { "0.0": { "post": { @@ -1330,7 +2159,7 @@ "position": { "0.0": { "post": { - "vector": [0, 3.88, 0.12] + "vector": [0, 3.88, 2.12] }, "lerp_mode": "catmullrom" }, @@ -1366,13 +2195,13 @@ }, "0.7917": { "post": { - "vector": [0, 3.88, 0.12] + "vector": [0, 3.88, 2.12] }, "lerp_mode": "catmullrom" } } }, - "RightCalf1": { + "LeftCalf1": { "rotation": { "0.0": { "post": { @@ -1412,7 +2241,7 @@ } } }, - "RightUpperFoot": { + "LeftCalf2": { "rotation": { "0.0": { "post": { @@ -1475,7 +2304,7 @@ } } }, - "FootRight": { + "LeftFoot": { "rotation": { "0.0": { "post": { @@ -1571,7 +2400,7 @@ } } }, - "LeftThigh": { + "ThighRight": { "rotation": { "0.0": { "post": { @@ -1625,7 +2454,7 @@ }, "0.375": { "post": { - "vector": [0, 3.88, 0.12] + "vector": [0, 3.88, 2.12] }, "lerp_mode": "catmullrom" }, @@ -1643,7 +2472,7 @@ } } }, - "LeftCalf1": { + "RightCalf1": { "rotation": { "0.0": { "post": { @@ -1683,7 +2512,7 @@ } } }, - "LeftUpperFoot": { + "RightCalf2": { "rotation": { "0.0": { "post": { @@ -1743,7 +2572,7 @@ } } }, - "FootLeft": { + "RightFoot": { "rotation": { "0.0": { "post": { @@ -1826,506 +2655,12 @@ "lerp_mode": "catmullrom" } } - }, - "Body3": { - "rotation": { - "0.0": { - "post": { - "vector": [-20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [-20, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail1": { - "rotation": { - "vector": [7.5, "-math.sin(query.anim_time*455)* 5", "math.sin(query.anim_time*455)* 2.5"] - } - }, - "Tail2": { - "rotation": { - "vector": [7.5, "-math.sin(query.anim_time*455-50)* 5", 0] - } - }, - "Tail3": { - "rotation": { - "vector": [2.5, "-math.sin(query.anim_time*455-100)* 4", "math.sin(query.anim_time*455-50)* 2.5"] - } - }, - "Tail4": { - "rotation": { - "vector": [0, "-math.sin(query.anim_time*455-150)* 4", 0] - } - }, - "Tail5": { - "rotation": { - "vector": [0, "-math.sin(query.anim_time*455-200)* 4", "math.sin(query.anim_time*455-100)* 2.5"] - } - }, - "Tail6": { - "rotation": { - "vector": [0, "-math.sin(query.anim_time*455)* -4", 0] - } - }, - "Body1": { - "rotation": { - "0.0": { - "post": { - "vector": [8.75, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [8.75, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Body2": { - "rotation": { - "0.0": { - "post": { - "vector": [8.75, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [8.75, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Neck": { - "rotation": { - "0.0": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Head": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "UpperArmLeft": { - "rotation": { - "0.0": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [52.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [52.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 5, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 2.5, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 5, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 2.5, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [0, 5, -2] - }, - "lerp_mode": "catmullrom" - } - } - }, - "LowerArmLeft": { - "rotation": { - "0.0": { - "post": { - "vector": [-71.25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-77.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-77.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [-65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [-71.25, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "LeftHand": { - "rotation": { - "vector": [75, 0, 0] - } - }, - "UpperArmRight": { - "rotation": { - "0.0": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [52.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [52.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 5, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 2.5, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 5, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 2.5, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [0, 5, -2] - }, - "lerp_mode": "catmullrom" - } - } - }, - "LowerArmRight": { - "rotation": { - "0.0": { - "post": { - "vector": [-71.25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-77.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-77.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [-65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [-71.25, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "RightHand": { - "rotation": { - "vector": [75, 0, 0] - } } } }, - "anim.corythosaurus.mouth": { + "animation.corythosaurus.mouth": { "animation_length": 1.5, "bones": { - "Neck8": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.125": { - "post": { - "vector": [-12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, "Neck": { "rotation": { "0.0": { @@ -2354,90 +2689,6 @@ } } }, - "Neck2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.125": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Neck6": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.125": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Head": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.125": { - "post": { - "vector": [-12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, "Jaw": { "rotation": { "0.0": { @@ -2465,13 +2716,8 @@ "lerp_mode": "catmullrom" } } - } - } - }, - "anim.corythosaurus.attack": { - "animation_length": 1, - "bones": { - "Body3": { + }, + "Neck2": { "rotation": { "0.0": { "post": { @@ -2479,19 +2725,19 @@ }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.375": { "post": { - "vector": [-17.5, 0, 0] + "vector": [-2.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.125": { "post": { - "vector": [1.25, 0, 0] + "vector": [-2.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.5": { "post": { "vector": [0, 0, 0] }, @@ -2499,6 +2745,139 @@ } } }, + "Neck3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0.00924, 0.52546, -0.98681] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0.00924, 0.52546, -0.98681] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Jaw1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Throat": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [10, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [0, 0.7, 0.3] + } + } + } + } + }, + "animation.corythosaurus.attack ": { + "animation_length": 1, + "bones": { "Body1": { "rotation": { "0.0": { @@ -2527,73 +2906,7 @@ } } }, - "UpperArmLeft": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-19.75219, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 5.5, -1.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 4.54, 0.98] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, -0.5, 0.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "LowerArmLeft": { + "Body3": { "rotation": { "0.0": { "post": { @@ -2602,57 +2915,17 @@ "lerp_mode": "catmullrom" }, "0.5": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-3.54736, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [23.125, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [-5.11719, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "LeftHand": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { "post": { "vector": [-17.5, 0, 0] }, "lerp_mode": "catmullrom" }, + "0.75": { + "post": { + "vector": [1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, "1.0": { "post": { "vector": [0, 0, 0] @@ -2794,9 +3067,142 @@ "lerp_mode": "catmullrom" } } + }, + "UpperArmLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-19.75219, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 5.5, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 4.54, 0.98] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -0.5, 0.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LowerArmLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-3.54736, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [23.125, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-5.11719, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftHand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } } } } - }, - "geckolib_format_version": 2 + } } \ No newline at end of file diff --git a/common/src/main/resources/assets/jurassicrevived/animations/diplodocus.animation.json b/common/src/main/resources/assets/jurassicrevived/animations/diplodocus.animation.json index dc96652..650b503 100755 --- a/common/src/main/resources/assets/jurassicrevived/animations/diplodocus.animation.json +++ b/common/src/main/resources/assets/jurassicrevived/animations/diplodocus.animation.json @@ -4225,6 +4225,5 @@ } } } - }, - "geckolib_format_version": 2 + } } \ No newline at end of file diff --git a/common/src/main/resources/assets/jurassicrevived/animations/distortus_rex.animation.json b/common/src/main/resources/assets/jurassicrevived/animations/distortus_rex.animation.json index 44b7fe5..7f03568 100755 --- a/common/src/main/resources/assets/jurassicrevived/animations/distortus_rex.animation.json +++ b/common/src/main/resources/assets/jurassicrevived/animations/distortus_rex.animation.json @@ -1,7 +1,7 @@ { "format_version": "1.8.0", "animations": { - "animation.distortus": { + "anim.distortus_rex.pose": { "loop": true, "bones": { "Body1": { @@ -153,6 +153,9 @@ "leftarm2": { "rotation": { "vector": [-30, 0, 0] + }, + "position": { + "vector": [3, 0, 0] } }, "arm2": { @@ -192,6 +195,421 @@ } } }, + "anim.distortus_rex.idle": { + "loop": true, + "animation_length": 8, + "bones": { + "Body1": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Body2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [0, 0, 0] + }, + "5.0": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "7.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "vector": [0, 0, 0] + } + } + }, + "Chest": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [2.5, 0, 0] + }, + "8.0": { + "vector": [0, 0, 0] + } + } + }, + "Head": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-2.5, 0, 0] + }, + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [0, 0, 0] + }, + "5.0": { + "pre": { + "vector": [-2.5, 0, 0] + }, + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "7.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "vector": [0, 0, 0] + } + } + }, + "Eyes": { + "scale": { + "3.75": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "4.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [0, 0, 0] + }, + "5.0": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "7.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "vector": [0, 0, 0] + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [0, 0, 0] + }, + "5.0": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "7.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "vector": [0, 0, 0] + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [0, 0, 0] + }, + "5.0": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "7.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "vector": [0, 0, 0] + } + } + }, + "Tail4": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail5": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail6": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightarm2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "8.0": { + "vector": [0, 0, 0] + } + } + }, + "leftarm2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "8.0": { + "vector": [0, 0, 0] + } + } + } + } + }, "anim.distortus_rex.walk": { "loop": true, "animation_length": 2, @@ -663,15 +1081,24 @@ } }, "position": { - "0.75": { - "pre": { - "vector": [0, 0, 0] - }, + "0.0": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 1.06, 0] + }, + "lerp_mode": "catmullrom" + }, "1.375": { "post": { "vector": [0, 3, 0] @@ -706,9 +1133,9 @@ }, "lerp_mode": "catmullrom" }, - "1.0833": { + "1.0": { "post": { - "vector": [-12.1, 0, 0] + "vector": [-12.07, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -746,6 +1173,12 @@ }, "lerp_mode": "catmullrom" }, + "1.0": { + "post": { + "vector": [17.45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, "1.25": { "post": { "vector": [17, 0, 0] @@ -775,6 +1208,9 @@ "0.75": { "vector": [0, -0.5, -0.5] }, + "1.0": { + "vector": [0, -0.6, -0.45] + }, "2.0": { "vector": [0, -1, -0.25] } @@ -806,6 +1242,12 @@ }, "lerp_mode": "catmullrom" }, + "1.0": { + "post": { + "vector": [1.49, 0, 0] + }, + "lerp_mode": "catmullrom" + }, "1.25": { "post": { "vector": [35, 0, 0] @@ -838,6 +1280,9 @@ "0.75": { "vector": [0, 0.47002, 0.19898] }, + "1.0": { + "vector": [0, 0.38, 0.16] + }, "2.0": { "vector": [0, 0, 0] } @@ -1342,6 +1787,1183 @@ } } }, + "anim.distortus_rex.run": { + "loop": true, + "animation_length": 1.3333, + "bones": { + "Body1": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [2.5, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [2.5, 0, 7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Chest": { + "rotation": { + "0.0": { + "post": { + "vector": [7.49067, -0.43399, -5.03793] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [7.49067, 0.43399, 5.03793] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [7.49067, -0.43399, -5.03793] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Neck2": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Neck3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-2.55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "NeckFlap": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftShoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-6.25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightShoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-6.25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail1": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*180)* -5", "math.sin(query.anim_time*180)* -1"] + } + }, + "Tail2": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*180-50)* -5", "math.sin(query.anim_time*180-50)* -1"] + } + }, + "Tail3": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*180-100)* -5", "math.sin(query.anim_time*180-100)* -1"] + } + }, + "Tail4": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*180-150)* -5", "math.sin(query.anim_time*180-150)* -1"] + } + }, + "Tail5": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*180-200)* -5", "math.sin(query.anim_time*180-200)* -1"] + } + }, + "Tail6": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*180-250)* -5", "math.sin(query.anim_time*180-250)* -1"] + } + }, + "Tail7": { + "rotation": { + "vector": [0, "-math.sin(query.anim_time*180-300)* -5", "math.sin(query.anim_time*180-300)* -1"] + } + }, + "LeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 1.06, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 3, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-3.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-12.07, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9444": { + "post": { + "vector": [15.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftShin": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, -1, -0.25] + }, + "0.25": { + "vector": [0, -0.5, 0] + }, + "0.5": { + "vector": [0, -0.5, -0.5] + }, + "0.6667": { + "vector": [0, -0.6, -0.45] + }, + "1.3333": { + "vector": [0, -1, -0.25] + } + } + }, + "LeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3889": { + "post": { + "vector": [-6.09, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1.49, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [94.68, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.3889": { + "vector": [0, 1.01, 0.11] + }, + "0.5": { + "vector": [0, 0.47002, 0.19898] + }, + "0.6667": { + "vector": [0, 0.38, 0.16] + }, + "1.3333": { + "vector": [0, 0, 0] + } + } + }, + "RightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-3.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.06, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 3, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 1.06, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.07, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2778": { + "post": { + "vector": [15.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-3.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-12.07, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightShin": { + "rotation": { + "0.0": { + "post": { + "vector": [17.45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [17.45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, -0.6, -0.45] + }, + "0.6667": { + "vector": [0, -1, -0.25] + }, + "0.9167": { + "vector": [0, -0.5, 0] + }, + "1.1667": { + "vector": [0, -0.5, -0.5] + }, + "1.3333": { + "vector": [0, -0.6, -0.45] + } + } + }, + "RightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [1.49, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [94.68, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0556": { + "post": { + "vector": [-6.09, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [1.49, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0.38, 0.16] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, 0, 0] + }, + "1.0556": { + "vector": [0, 1.01, 0.11] + }, + "1.1667": { + "vector": [0, 0.47002, 0.19898] + }, + "1.3333": { + "vector": [0, 0.38, 0.16] + } + } + }, + "rightarm2": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-3.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm": { + "rotation": { + "0.0": { + "post": { + "vector": [4.37, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.78, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [4.37, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "hand": { + "rotation": { + "0.0": { + "post": { + "vector": [6.55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3889": { + "post": { + "vector": [-3.44, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [6.55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftarm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25.78, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [16.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0556": { + "post": { + "vector": [-3.44, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, "anim.distortus_rex.attack": { "loop": true, "animation_length": 1, @@ -1485,18 +3107,15 @@ }, "Body2": { "rotation": { - "0.125": { - "pre": { - "vector": [0, 0, 0] - }, + "0.0": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.375": { + "0.125": { "post": { - "vector": [-5, 0, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -1550,7 +3169,7 @@ }, "0.25": { "post": { - "vector": [0, -0.4, -0.97] + "vector": [0, 0.5763, -1.18644] }, "lerp_mode": "catmullrom" }, @@ -1562,7 +3181,7 @@ }, "1.0": { "post": { - "vector": [0, -0.1, 0.7] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1686,10 +3305,13 @@ }, "Tail1": { "rotation": { - "0.125": { - "pre": { + "0.0": { + "post": { "vector": [0, 0, 0] }, + "lerp_mode": "catmullrom" + }, + "0.125": { "post": { "vector": [0, 0, 0] }, @@ -1717,10 +3339,13 @@ }, "Tail2": { "rotation": { - "0.125": { - "pre": { + "0.0": { + "post": { "vector": [0, 0, 0] }, + "lerp_mode": "catmullrom" + }, + "0.125": { "post": { "vector": [0, 0, 0] }, @@ -1748,10 +3373,13 @@ }, "Tail3": { "rotation": { - "0.125": { - "pre": { + "0.0": { + "post": { "vector": [0, 0, 0] }, + "lerp_mode": "catmullrom" + }, + "0.125": { "post": { "vector": [0, 0, 0] }, @@ -1779,10 +3407,13 @@ }, "Tail4": { "rotation": { - "0.25": { - "pre": { + "0.0": { + "post": { "vector": [0, 0, 0] }, + "lerp_mode": "catmullrom" + }, + "0.25": { "post": { "vector": [0, 0, 0] }, @@ -1810,10 +3441,13 @@ }, "Tail5": { "rotation": { - "0.25": { - "pre": { + "0.0": { + "post": { "vector": [0, 0, 0] }, + "lerp_mode": "catmullrom" + }, + "0.25": { "post": { "vector": [0, 0, 0] }, @@ -1841,10 +3475,13 @@ }, "Tail6": { "rotation": { - "0.25": { - "pre": { + "0.0": { + "post": { "vector": [0, 0, 0] }, + "lerp_mode": "catmullrom" + }, + "0.25": { "post": { "vector": [0, 0, 0] }, @@ -2028,634 +3665,6 @@ } } }, - "anim.distortus_rex.idle": { - "loop": true, - "animation_length": 8, - "bones": { - "Body3": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "1.0": { - "pre": { - "vector": [2.5, 0, 0] - }, - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "vector": [0, 0, 0] - }, - "5.0": { - "pre": { - "vector": [2.5, 0, 0] - }, - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "7.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "vector": [0, 0, 0] - } - } - }, - "UpperArmLEFT": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "6.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "LowerArmLEFT": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "6.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "UpperArmRight": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "6.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "LowerArmRight": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "6.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Neck1": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "6.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Body1": { - "rotation": { - "0.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "6.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Body2": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "1.0": { - "pre": { - "vector": [2.5, 0, 0] - }, - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "vector": [0, 0, 0] - }, - "5.0": { - "pre": { - "vector": [2.5, 0, 0] - }, - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "7.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "vector": [0, 0, 0] - } - } - }, - "Chest": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "2.0": { - "vector": [2.5, 0, 0] - }, - "8.0": { - "vector": [0, 0, 0] - } - } - }, - "Head": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "1.0": { - "pre": { - "vector": [-2.5, 0, 0] - }, - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "vector": [0, 0, 0] - }, - "5.0": { - "pre": { - "vector": [-2.5, 0, 0] - }, - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "7.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "vector": [0, 0, 0] - } - } - }, - "Eyes": { - "scale": { - "3.75": { - "pre": { - "vector": [1, 1, 1] - }, - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "4.25": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail1": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "1.0": { - "pre": { - "vector": [2.5, 0, 0] - }, - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "vector": [0, 0, 0] - }, - "5.0": { - "pre": { - "vector": [2.5, 0, 0] - }, - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "7.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "vector": [0, 0, 0] - } - } - }, - "Tail2": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "1.0": { - "pre": { - "vector": [2.5, 0, 0] - }, - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "vector": [0, 0, 0] - }, - "5.0": { - "pre": { - "vector": [2.5, 0, 0] - }, - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "7.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "vector": [0, 0, 0] - } - } - }, - "Tail3": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "1.0": { - "pre": { - "vector": [2.5, 0, 0] - }, - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "vector": [0, 0, 0] - }, - "5.0": { - "pre": { - "vector": [2.5, 0, 0] - }, - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "7.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "vector": [0, 0, 0] - } - } - }, - "Tail4": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "6.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail5": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "6.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail6": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "6.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightarm2": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "8.0": { - "vector": [0, 0, 0] - } - } - }, - "leftarm2": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "8.0": { - "vector": [0, 0, 0] - } - } - } - } - }, "anim.distortus_rex.mouth": { "loop": true, "animation_length": 1.25, @@ -2786,6 +3795,5 @@ } } } - }, - "geckolib_format_version": 2 + } } \ No newline at end of file diff --git a/common/src/main/resources/assets/jurassicrevived/animations/giganotosaurus.animation.json b/common/src/main/resources/assets/jurassicrevived/animations/giganotosaurus.animation.json index 7be2f50..78c9a1a 100755 --- a/common/src/main/resources/assets/jurassicrevived/animations/giganotosaurus.animation.json +++ b/common/src/main/resources/assets/jurassicrevived/animations/giganotosaurus.animation.json @@ -3505,6 +3505,5 @@ } } } - }, - "geckolib_format_version": 2 + } } \ No newline at end of file diff --git a/common/src/main/resources/assets/jurassicrevived/animations/indoraptor.animation.json b/common/src/main/resources/assets/jurassicrevived/animations/indoraptor.animation.json index 9e89bf2..2b65337 100755 --- a/common/src/main/resources/assets/jurassicrevived/animations/indoraptor.animation.json +++ b/common/src/main/resources/assets/jurassicrevived/animations/indoraptor.animation.json @@ -284,62 +284,6 @@ "lerp_mode": "catmullrom" } } - }, - "Head": { - "rotation": { - "0.0": { - "post": { - "vector": [-3.7, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-3.7, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.5": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } } } }, @@ -405,7 +349,7 @@ "position": { "0.0": { "post": { - "vector": [0, 0, -3] + "vector": [0, -1.5, -3] }, "lerp_mode": "catmullrom" }, @@ -417,13 +361,13 @@ }, "0.75": { "post": { - "vector": [0, 1.25, -1] + "vector": [0, -0.25, 1] }, "lerp_mode": "catmullrom" }, "0.875": { "post": { - "vector": [0, 1.14, -1] + "vector": [0, -0.36, 1] }, "lerp_mode": "catmullrom" }, @@ -435,13 +379,13 @@ }, "1.4167": { "post": { - "vector": [0, 4.25, 0] + "vector": [0, 1.25, -1] }, "lerp_mode": "catmullrom" }, "2.0": { "post": { - "vector": [0, 0, -3] + "vector": [0, -1.5, -3] }, "lerp_mode": "catmullrom" } @@ -475,7 +419,7 @@ }, "1.6667": { "post": { - "vector": [-13.07, 0, 0] + "vector": [-30.57, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -613,9 +557,311 @@ "vector": ["-math.sin(query.anim_time*360-50)* -3", 0, 0] } }, - "Head": { + "RightShoulder": { "rotation": { - "vector": ["-math.sin(query.anim_time*360-100)* 3", 0, 0] + "0.0": { + "post": { + "vector": [18.99, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [36.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [17.22, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-15.1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [18.99, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.06, 0.45] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 1.25, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -1.5, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, -0.25, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, -0.36, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -0.06, 0.45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightForearm": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-26.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-30.57, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-1.04, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftHand2": { + "rotation": { + "0.0": { + "vector": [17.5, 0, 0] + }, + "0.1667": { + "vector": [16.43, 0, 0] + }, + "0.375": { + "vector": [11.04, 0, 0] + }, + "0.4583": { + "vector": [8.86, 0, 0] + }, + "0.5833": { + "vector": [-0.65, 0, 0] + }, + "0.75": { + "vector": [-22.5, 0, 0] + }, + "1.0": { + "vector": [-43.37, 0, 0] + }, + "1.3333": { + "pre": { + "vector": [154.52, 0, 0] + }, + "post": { + "vector": [154.52, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [63.99, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [17.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0.52454, -0.16539] + }, + "0.2083": { + "vector": [0, 0.82472, -0.23265] + }, + "0.4583": { + "vector": [0, -0.05577, -0.06511] + }, + "0.75": { + "vector": [0, 0.74062, 0.11823] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-0.00012, -1.16247, -0.02149] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, -0.26222, -1.14766] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0.52454, -0.16539] + } + } + }, + "HandRIGHT2": { + "rotation": { + "0.0": { + "vector": [-43.37, 0, 0] + }, + "0.3333": { + "pre": { + "vector": [154.52, 0, 0] + }, + "post": { + "vector": [154.52, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [63.99, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [17.5, 0, 0] + }, + "1.1667": { + "vector": [16.43, 0, 0] + }, + "1.375": { + "vector": [11.04, 0, 0] + }, + "1.4583": { + "vector": [8.86, 0, 0] + }, + "1.5833": { + "vector": [-0.65, 0, 0] + }, + "1.75": { + "vector": [-22.5, 0, 0] + }, + "2.0": { + "vector": [-43.37, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-0.00012, -1.16247, -0.02149] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -0.26222, -1.14766] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0.52454, -0.16539] + }, + "1.2083": { + "vector": [0, 0.82472, -0.23265] + }, + "1.4583": { + "vector": [0, -0.05577, -0.06511] + }, + "1.75": { + "vector": [0, 0.74062, 0.11823] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } } }, "LeftThigh": { @@ -628,7 +874,7 @@ }, "0.625": { "post": { - "vector": [-21.25, 0, 0] + "vector": [-36.25, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -648,31 +894,37 @@ "position": { "0.0": { "post": { - "vector": [0, 1.88, 3] + "vector": [0, -0.12, 2] }, "lerp_mode": "catmullrom" }, "0.4583": { "post": { - "vector": [0, 2, 0] + "vector": [0, 2, 1] }, "lerp_mode": "catmullrom" }, "0.875": { "post": { - "vector": [0, 5.69, -1.73] + "vector": [0, 1.69, 0.27] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0.81, -1.44] }, "lerp_mode": "catmullrom" }, "1.25": { "post": { - "vector": [0, 4.69, -1.73] + "vector": [0, 1.69, -1.73] }, "lerp_mode": "catmullrom" }, "2.0": { "post": { - "vector": [0, 1.88, 3] + "vector": [0, -0.12, 2] }, "lerp_mode": "catmullrom" } @@ -731,7 +983,7 @@ }, "0.7917": { "post": { - "vector": [-17.5, 0, 0] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -768,7 +1020,7 @@ }, "0.9167": { "post": { - "vector": [76.25, 0, 0] + "vector": [66.25, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -786,7 +1038,7 @@ }, "1.4167": { "post": { - "vector": [11.59, 0, 0] + "vector": [1.59, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -808,16 +1060,16 @@ "vector": [0, -0.26808, -0.9634] }, "1.125": { - "vector": [0, 0.77983, -1.2412] + "vector": [0, -0.25779, -0.82485] }, "1.25": { - "vector": [0, 1.2313, -1.45608] + "vector": [0, -0.79766, -0.30454] }, "1.4167": { - "vector": [0, 2.44465, -0.7135] + "vector": [0, -0.1012, -0.46615] }, "1.5833": { - "vector": [0, 1.10275, -0.0139] + "vector": [0, 0.29259, -0.40119] }, "2.0": { "vector": [0, 0, 0] @@ -828,7 +1080,7 @@ "rotation": { "0.0": { "post": { - "vector": [-31.36, 0, 0] + "vector": [-37.72, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -846,13 +1098,13 @@ }, "1.625": { "post": { - "vector": [-21.25, 0, 0] + "vector": [-36.25, 0, 0] }, "lerp_mode": "catmullrom" }, "2.0": { "post": { - "vector": [-31.36, 0, 0] + "vector": [-37.72, 0, 0] }, "lerp_mode": "catmullrom" } @@ -860,37 +1112,43 @@ "position": { "0.0": { "post": { - "vector": [0, 5.77, -2.03] + "vector": [0, 1.18, -0.61] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0.81, -1.44] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [0, 4.69, -1.73] + "vector": [0, 1.69, -1.73] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 1.88, 3] + "vector": [0, -0.12, 2] }, "lerp_mode": "catmullrom" }, "1.4583": { "post": { - "vector": [0, 2, 0] + "vector": [0, 2, 1] }, "lerp_mode": "catmullrom" }, "1.875": { "post": { - "vector": [0, 5.69, -1.73] + "vector": [0, 1.69, 0.27] }, "lerp_mode": "catmullrom" }, "2.0": { "post": { - "vector": [0, 5.77, -2.03] + "vector": [0, 1.18, -0.61] }, "lerp_mode": "catmullrom" } @@ -946,7 +1204,7 @@ "rotation": { "0.0": { "post": { - "vector": [5.5, 0, 0] + "vector": [14.27, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -970,13 +1228,13 @@ }, "1.7917": { "post": { - "vector": [-17.5, 0, 0] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, "2.0": { "post": { - "vector": [5.5, 0, 0] + "vector": [14.27, 0, 0] }, "lerp_mode": "catmullrom" } @@ -986,7 +1244,7 @@ "rotation": { "0.0": { "post": { - "vector": [52.25, 0, 0] + "vector": [45.29, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -1004,7 +1262,7 @@ }, "0.4167": { "post": { - "vector": [11.59, 0, 0] + "vector": [1.59, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -1034,32 +1292,32 @@ }, "1.9167": { "post": { - "vector": [76.25, 0, 0] + "vector": [66.25, 0, 0] }, "lerp_mode": "catmullrom" }, "2.0": { "post": { - "vector": [52.25, 0, 0] + "vector": [45.29, 0, 0] }, "lerp_mode": "catmullrom" } }, "position": { "0.0": { - "vector": [0, 0.52, -1.17] + "vector": [0, -0.26, -0.86] }, "0.125": { - "vector": [0, 0.77983, -1.2412] + "vector": [0, -0.25779, -0.82485] }, "0.25": { - "vector": [0, 1.2313, -1.45608] + "vector": [0, -0.79766, -0.30454] }, "0.4167": { - "vector": [0, 2.44465, -0.7135] + "vector": [0, -0.1012, -0.46615] }, "0.5833": { - "vector": [0, 1.10275, -0.0139] + "vector": [0, 0.29259, -0.40119] }, "1.0": { "vector": [0, 0, 0] @@ -1068,233 +1326,7 @@ "vector": [0, -0.26808, -0.9634] }, "2.0": { - "vector": [0, 0.52, -1.17] - } - } - }, - "RightShoulder": { - "rotation": { - "0.0": { - "post": { - "vector": [18.99, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [36.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [17.22, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [-15.1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.9583": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [18.99, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0.44, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 4.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [0, 1.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.875": { - "post": { - "vector": [0, 1.14, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0.44, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "RightForearm": { - "rotation": { - "0.0": { - "post": { - "vector": [25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-26.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-13.07, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-1.04, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [25, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "RightHand": { - "rotation": { - "0.0": { - "vector": [-43.37, 0, 0] - }, - "0.3333": { - "pre": { - "vector": [114.52, 0, 0] - }, - "post": { - "vector": [114.52, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [63.99, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "vector": [17.5, 0, 0] - }, - "1.1667": { - "vector": [16.43, 0, 0] - }, - "1.375": { - "vector": [11.04, 0, 0] - }, - "1.4583": { - "vector": [8.86, 0, 0] - }, - "1.5833": { - "vector": [-0.65, 0, 0] - }, - "1.75": { - "vector": [-22.5, 0, 0] - }, - "2.0": { - "vector": [-43.37, 0, 0] - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, -2.49224, -1.33745] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -0.26222, -1.14766] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "vector": [0, 0.52454, -0.16539] - }, - "1.2083": { - "vector": [0, 0.82472, -0.23265] - }, - "1.4583": { - "vector": [0, -0.05577, -0.06511] - }, - "1.75": { - "vector": [0, 0.74062, 0.11823] - }, - "2.0": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [0, -0.26, -0.86] } } } @@ -1302,7 +1334,7 @@ }, "anim.indoraptor.run": { "loop": true, - "animation_length": 0.5797, + "animation_length": 0.5833, "bones": { "BodyMain": { "rotation": { @@ -1312,13 +1344,13 @@ }, "lerp_mode": "catmullrom" }, - "0.2899": { + "0.2917": { "post": { "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [0, 0, 0] }, @@ -1332,13 +1364,13 @@ }, "lerp_mode": "catmullrom" }, - "0.2899": { + "0.2917": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [0, 2, -2] }, @@ -1354,19 +1386,19 @@ }, "lerp_mode": "catmullrom" }, - "0.1449": { + "0.125": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4348": { + "0.4167": { "post": { "vector": [-12.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [-6.25, 0, 0] }, @@ -1382,37 +1414,37 @@ }, "lerp_mode": "catmullrom" }, - "0.1449": { + "0.125": { "post": { "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.2778": { + "0.2917": { "post": { "vector": [15, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3502": { + "0.3333": { "post": { "vector": [36.63, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4106": { + "0.4167": { "post": { "vector": [17.22, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4952": { + "0.5": { "post": { "vector": [-15.1, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [-45, 0, 0] }, @@ -1422,43 +1454,43 @@ "position": { "0.0": { "post": { - "vector": [0, 0, -3] + "vector": [0, -1.5, -3] }, "lerp_mode": "catmullrom" }, - "0.1449": { + "0.125": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.2174": { + "0.2083": { "post": { - "vector": [0, 1.25, -1] + "vector": [0, -0.25, 1] }, "lerp_mode": "catmullrom" }, - "0.2536": { + "0.25": { "post": { - "vector": [0, 1.14, -1] + "vector": [0, -0.36, 1] }, "lerp_mode": "catmullrom" }, - "0.314": { + "0.3333": { "post": { "vector": [0, 0.25, 0] }, "lerp_mode": "catmullrom" }, - "0.4106": { + "0.4167": { "post": { - "vector": [0, 4.25, 0] + "vector": [0, 1.25, -1] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { - "vector": [0, 0, -3] + "vector": [0, -1.5, -3] }, "lerp_mode": "catmullrom" } @@ -1472,31 +1504,31 @@ }, "lerp_mode": "catmullrom" }, - "0.1449": { + "0.125": { "post": { "vector": [-1.04, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.2899": { + "0.2917": { "post": { "vector": [25, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4106": { + "0.4167": { "post": { "vector": [-26.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4831": { + "0.5": { "post": { - "vector": [-13.07, 0, 0] + "vector": [-30.57, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [27.5, 0, 0] }, @@ -1509,25 +1541,22 @@ "0.0": { "vector": [17.5, 0, 0] }, - "0.0483": { + "0.0417": { "vector": [16.43, 0, 0] }, - "0.1087": { - "vector": [11.04, 0, 0] - }, - "0.1329": { + "0.125": { "vector": [8.86, 0, 0] }, - "0.1691": { + "0.1667": { "vector": [-0.65, 0, 0] }, - "0.2174": { + "0.2083": { "vector": [-22.5, 0, 0] }, - "0.2899": { + "0.2917": { "vector": [-43.37, 0, 0] }, - "0.3865": { + "0.375": { "pre": { "vector": [114.52, 0, 0] }, @@ -1536,13 +1565,13 @@ }, "lerp_mode": "catmullrom" }, - "0.5072": { + "0.5": { "post": { "vector": [63.99, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "vector": [17.5, 0, 0] } }, @@ -1550,16 +1579,16 @@ "0.0": { "vector": [0, 0.52454, -0.16539] }, - "0.0604": { + "0.0417": { "vector": [0, 0.82472, -0.23265] }, - "0.1329": { + "0.125": { "vector": [0, -0.05577, -0.06511] }, - "0.2174": { + "0.2083": { "vector": [0, 0.74062, 0.11823] }, - "0.2899": { + "0.2917": { "pre": { "vector": [0, 0, 0] }, @@ -1568,19 +1597,19 @@ }, "lerp_mode": "catmullrom" }, - "0.3865": { + "0.375": { "post": { "vector": [0, -2.49224, -1.33745] }, "lerp_mode": "catmullrom" }, - "0.5072": { + "0.5": { "post": { "vector": [0, -0.26222, -1.14766] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "vector": [0, 0.52454, -0.16539] } } @@ -1593,19 +1622,19 @@ }, "lerp_mode": "catmullrom" }, - "0.1449": { + "0.125": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4348": { + "0.4167": { "post": { "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [5, 0, 0] }, @@ -1621,13 +1650,13 @@ }, "lerp_mode": "catmullrom" }, - "0.2899": { + "0.2917": { "post": { "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [0, 0, 0] }, @@ -1643,19 +1672,19 @@ }, "lerp_mode": "catmullrom" }, - "0.0725": { + "0.0833": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3623": { + "0.375": { "post": { "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [0.78, 0, 0] }, @@ -1671,19 +1700,19 @@ }, "lerp_mode": "catmullrom" }, - "0.1449": { + "0.125": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4348": { + "0.4167": { "post": { "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [2.5, 0, 0] }, @@ -1699,19 +1728,19 @@ }, "lerp_mode": "catmullrom" }, - "0.2174": { + "0.2083": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5072": { + "0.5": { "post": { "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [4.22, 0, 0] }, @@ -1727,13 +1756,13 @@ }, "lerp_mode": "catmullrom" }, - "0.2899": { + "0.2917": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [5, 0, 0] }, @@ -1749,19 +1778,19 @@ }, "lerp_mode": "catmullrom" }, - "0.0725": { + "0.0833": { "post": { "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3623": { + "0.375": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [-4.22, 0, 0] }, @@ -1777,19 +1806,19 @@ }, "lerp_mode": "catmullrom" }, - "0.1449": { + "0.125": { "post": { "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4348": { + "0.4167": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [-2.5, 0, 0] }, @@ -1805,19 +1834,19 @@ }, "lerp_mode": "catmullrom" }, - "0.2174": { + "0.2083": { "post": { "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5072": { + "0.5": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [-0.78, 0, 0] }, @@ -1833,13 +1862,13 @@ }, "lerp_mode": "catmullrom" }, - "0.2899": { + "0.2917": { "post": { "vector": [-7.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [0, 0, 0] }, @@ -1847,25 +1876,301 @@ } } }, - "Head": { + "RightShoulder": { "rotation": { "0.0": { + "post": { + "vector": [-15.1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [36.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.22, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-15.1, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.16, -2.25] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -1.5, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.2899": { + "0.2917": { "post": { - "vector": [5, 0, 0] + "vector": [0, -0.25, 1] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.3333": { + "post": { + "vector": [0, -0.36, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1.25, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, -0.16, -2.25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "RightForearm": { + "rotation": { + "0.0": { + "post": { + "vector": [-30.57, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-1.04, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-26.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-30.57, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "LeftHand2": { + "rotation": { + "0.0": { + "vector": [17.5, 0, 0] + }, + "0.0417": { + "vector": [16.43, 0, 0] + }, + "0.125": { + "vector": [8.86, 0, 0] + }, + "0.1667": { + "vector": [-0.65, 0, 0] + }, + "0.2083": { + "vector": [-22.5, 0, 0] + }, + "0.2917": { + "vector": [-43.37, 0, 0] + }, + "0.375": { + "pre": { + "vector": [154.52, 0, 0] + }, + "post": { + "vector": [154.52, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [63.99, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "vector": [17.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0.52454, -0.16539] + }, + "0.0417": { + "vector": [0, 0.82472, -0.23265] + }, + "0.125": { + "vector": [0, -0.05577, -0.06511] + }, + "0.2083": { + "vector": [0, 0.74062, 0.11823] + }, + "0.2917": { + "pre": { + "vector": [0, 0, 0] + }, "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-0.00012, -1.16247, -0.02149] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.26222, -1.14766] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "vector": [0, 0.52454, -0.16539] + } + } + }, + "HandRIGHT2": { + "rotation": { + "0.0": { + "post": { + "vector": [63.99, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "vector": [17.5, 0, 0] + }, + "0.125": { + "vector": [16.43, 0, 0] + }, + "0.2083": { + "vector": [8.86, 0, 0] + }, + "0.25": { + "vector": [-0.65, 0, 0] + }, + "0.2917": { + "vector": [-22.5, 0, 0] + }, + "0.375": { + "vector": [-43.37, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [154.52, 0, 0] + }, + "post": { + "vector": [154.52, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [63.99, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.26222, -1.14766] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "vector": [0, 0.52454, -0.16539] + }, + "0.125": { + "vector": [0, 0.82472, -0.23265] + }, + "0.2083": { + "vector": [0, -0.05577, -0.06511] + }, + "0.2917": { + "vector": [0, 0.74062, 0.11823] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-0.00012, -1.16247, -0.02149] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, -0.26222, -1.14766] + }, + "lerp_mode": "catmullrom" } } }, @@ -1877,19 +2182,19 @@ }, "lerp_mode": "catmullrom" }, - "0.1812": { + "0.1667": { "post": { - "vector": [-21.25, 0, 0] + "vector": [-36.25, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3623": { + "0.375": { "post": { "vector": [-31.25, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { "vector": [5, 0, 0] }, @@ -1899,31 +2204,37 @@ "position": { "0.0": { "post": { - "vector": [0, 1.88, 3] + "vector": [0, -0.12, 2] }, "lerp_mode": "catmullrom" }, - "0.1329": { + "0.125": { "post": { - "vector": [0, 2, 0] + "vector": [0, 2, 1] }, "lerp_mode": "catmullrom" }, - "0.2536": { + "0.25": { "post": { - "vector": [0, 5.69, -1.73] + "vector": [0, 1.69, 0.27] }, "lerp_mode": "catmullrom" }, - "0.3623": { + "0.3333": { "post": { - "vector": [0, 4.69, -1.73] + "vector": [0, 0.81, -1.44] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.375": { "post": { - "vector": [0, 1.88, 3] + "vector": [0, 1.69, -1.73] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, -0.12, 2] }, "lerp_mode": "catmullrom" } @@ -1934,7 +2245,7 @@ "0.0": { "vector": [-7.5, 0, 0] }, - "0.1812": { + "0.1667": { "pre": { "vector": [32.5, 0, 0] }, @@ -1943,25 +2254,25 @@ }, "lerp_mode": "catmullrom" }, - "0.2657": { + "0.25": { "post": { "vector": [1.25, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3623": { + "0.375": { "post": { - "vector": [-5, 0, 0] + "vector": [2.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4589": { + "0.4583": { "post": { "vector": [-0.46, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "vector": [-7.5, 0, 0] } } @@ -1971,7 +2282,7 @@ "0.0": { "vector": [20, 0, 0] }, - "0.0966": { + "0.0833": { "pre": { "vector": [17.5, 0, 0] }, @@ -1980,19 +2291,19 @@ }, "lerp_mode": "catmullrom" }, - "0.2295": { + "0.25": { "post": { - "vector": [-17.5, 0, 0] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3261": { + "0.3333": { "post": { - "vector": [15, 0, 0] + "vector": [20, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "vector": [20, 0, 0] } } @@ -2002,7 +2313,7 @@ "0.0": { "vector": [-15, 0, 0] }, - "0.0966": { + "0.0833": { "pre": { "vector": [43.75, 0, 0] }, @@ -2011,43 +2322,43 @@ }, "lerp_mode": "catmullrom" }, - "0.1812": { + "0.1667": { "post": { "vector": [80, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.2657": { + "0.25": { "post": { - "vector": [76.25, 0, 0] + "vector": [66.25, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3261": { + "0.3333": { "post": { - "vector": [20, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3623": { + "0.375": { "post": { - "vector": [20, 0, 0] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4106": { + "0.4167": { "post": { - "vector": [10, 0, 0] + "vector": [1.59, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4589": { + "0.4583": { "post": { "vector": [-6.47, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "vector": [-15, 0, 0] } }, @@ -2055,22 +2366,22 @@ "0.0": { "vector": [0, 0, 0] }, - "0.1812": { + "0.1667": { "vector": [0, -0.26808, -0.9634] }, - "0.3261": { - "vector": [0, 0.77983, -1.2412] + "0.3333": { + "vector": [0, -0.25779, -0.82485] }, - "0.3623": { - "vector": [0, 2.1313, -1.45608] + "0.375": { + "vector": [0, -0.79766, -0.30454] }, - "0.4106": { - "vector": [0, 2.44465, -0.7135] + "0.4167": { + "vector": [0, -0.1012, -0.46615] }, - "0.4589": { - "vector": [0, 1.10275, -0.0139] + "0.4583": { + "vector": [0, 0.29259, -0.40119] }, - "0.5797": { + "0.5833": { "vector": [0, 0, 0] } } @@ -2079,31 +2390,31 @@ "rotation": { "0.0": { "post": { - "vector": [-4.17, 0, 0] + "vector": [-5.42, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.0725": { + "0.0833": { "post": { "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.2536": { + "0.25": { "post": { - "vector": [-21.25, 0, 0] + "vector": [-36.25, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4348": { + "0.4583": { "post": { "vector": [-31.25, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { - "vector": [-4.17, 0, 0] + "vector": [-5.42, 0, 0] }, "lerp_mode": "catmullrom" } @@ -2111,37 +2422,43 @@ "position": { "0.0": { "post": { - "vector": [0, 2.67, 1.82] + "vector": [0, 0.45, 0.66] }, "lerp_mode": "catmullrom" }, - "0.0725": { + "0.0833": { "post": { - "vector": [0, 1.88, 3] + "vector": [0, -0.12, 2] }, "lerp_mode": "catmullrom" }, - "0.2053": { + "0.2083": { "post": { - "vector": [0, 2, 0] + "vector": [0, 2, 1] }, "lerp_mode": "catmullrom" }, - "0.3261": { + "0.3333": { "post": { - "vector": [0, 5.69, -1.73] + "vector": [0, 1.69, 0.27] }, "lerp_mode": "catmullrom" }, - "0.4348": { + "0.4167": { "post": { - "vector": [0, 4.69, -1.73] + "vector": [0, 0.81, -1.44] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.4583": { "post": { - "vector": [0, 2.67, 1.82] + "vector": [0, 1.69, -1.73] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0.45, 0.66] }, "lerp_mode": "catmullrom" } @@ -2151,14 +2468,14 @@ "rotation": { "0.0": { "post": { - "vector": [-4.7, 0, 0] + "vector": [-4.25, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.0725": { + "0.0833": { "vector": [-7.5, 0, 0] }, - "0.2536": { + "0.25": { "pre": { "vector": [32.5, 0, 0] }, @@ -2167,27 +2484,27 @@ }, "lerp_mode": "catmullrom" }, - "0.3382": { + "0.3333": { "post": { "vector": [1.25, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4348": { + "0.4583": { "post": { - "vector": [-5, 0, 0] + "vector": [2.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5314": { + "0.5417": { "post": { "vector": [-0.46, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { - "vector": [-4.7, 0, 0] + "vector": [-4.25, 0, 0] }, "lerp_mode": "catmullrom" } @@ -2196,12 +2513,12 @@ "RightAnkle": { "rotation": { "0.0": { - "vector": [19.92, 0, 0] + "vector": [20.74, 0, 0] }, - "0.0725": { + "0.0833": { "vector": [20, 0, 0] }, - "0.1691": { + "0.1667": { "pre": { "vector": [17.5, 0, 0] }, @@ -2210,20 +2527,20 @@ }, "lerp_mode": "catmullrom" }, - "0.3019": { + "0.3333": { "post": { - "vector": [-17.5, 0, 0] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3986": { + "0.4167": { "post": { - "vector": [15, 0, 0] + "vector": [20, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { - "vector": [19.92, 0, 0] + "0.5833": { + "vector": [20.74, 0, 0] } } }, @@ -2231,14 +2548,14 @@ "rotation": { "0.0": { "post": { - "vector": [-13.68, 0, 0] + "vector": [-11.77, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.0725": { + "0.0833": { "vector": [-15, 0, 0] }, - "0.1691": { + "0.1667": { "pre": { "vector": [43.75, 0, 0] }, @@ -2247,296 +2564,73 @@ }, "lerp_mode": "catmullrom" }, - "0.2536": { + "0.25": { "post": { "vector": [80, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3382": { + "0.3333": { "post": { - "vector": [76.25, 0, 0] + "vector": [66.25, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3986": { + "0.4167": { "post": { - "vector": [20, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4348": { + "0.4583": { "post": { - "vector": [20, 0, 0] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4831": { + "0.5": { "post": { - "vector": [10, 0, 0] + "vector": [1.59, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5314": { + "0.5417": { "post": { "vector": [-6.47, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5797": { + "0.5833": { "post": { - "vector": [-13.68, 0, 0] + "vector": [-11.77, 0, 0] }, "lerp_mode": "catmullrom" } }, "position": { "0.0": { - "vector": [0, 0.66, -0.01] + "vector": [0, 0.2, -0.27] }, - "0.0725": { + "0.0833": { "vector": [0, 0, 0] }, - "0.2536": { + "0.25": { "vector": [0, -0.26808, -0.9634] }, - "0.3986": { - "vector": [0, 0.77983, -1.2412] + "0.4167": { + "vector": [0, -0.25779, -0.82485] }, - "0.4348": { - "vector": [0, 2.1313, -1.45608] + "0.4583": { + "vector": [0, -0.79766, -0.30454] }, - "0.4831": { - "vector": [0, 2.44465, -0.7135] + "0.5": { + "vector": [0, -0.1012, -0.46615] }, - "0.5314": { - "vector": [0, 1.10275, -0.0139] + "0.5417": { + "vector": [0, 0.29259, -0.40119] }, - "0.5797": { - "vector": [0, 0.66, -0.01] - } - } - }, - "RightShoulder": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.11, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0725": { - "post": { - "vector": [-45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2174": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3502": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4227": { - "post": { - "vector": [36.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4831": { - "post": { - "vector": [17.22, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5797": { - "post": { - "vector": [-20.11, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 4.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0725": { - "post": { - "vector": [0, 0, -3] - }, - "lerp_mode": "catmullrom" - }, - "0.2174": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2899": { - "post": { - "vector": [0, 1.25, -1] - }, - "lerp_mode": "catmullrom" - }, - "0.3261": { - "post": { - "vector": [0, 1.14, -1] - }, - "lerp_mode": "catmullrom" - }, - "0.3865": { - "post": { - "vector": [0, 0.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4831": { - "post": { - "vector": [0, 4.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5797": { - "post": { - "vector": [0, 4.25, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "RightForearm": { - "rotation": { - "0.0": { - "post": { - "vector": [-3.22, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0725": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2174": { - "post": { - "vector": [-1.04, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3623": { - "post": { - "vector": [25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4831": { - "post": { - "vector": [-26.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5797": { - "post": { - "vector": [-3.22, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "RightHand": { - "rotation": { - "0.0": { - "post": { - "vector": [63.99, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0725": { - "vector": [17.5, 0, 0] - }, - "0.1208": { - "vector": [16.43, 0, 0] - }, - "0.1812": { - "vector": [11.04, 0, 0] - }, - "0.2053": { - "vector": [8.86, 0, 0] - }, - "0.2415": { - "vector": [-0.65, 0, 0] - }, - "0.2899": { - "vector": [-22.5, 0, 0] - }, - "0.3623": { - "vector": [-43.37, 0, 0] - }, - "0.4589": { - "pre": { - "vector": [114.52, 0, 0] - }, - "post": { - "vector": [114.52, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5797": { - "post": { - "vector": [63.99, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -0.26222, -1.14766] - }, - "lerp_mode": "catmullrom" - }, - "0.0725": { - "vector": [0, 0.52454, -0.16539] - }, - "0.1329": { - "vector": [0, 0.82472, -0.23265] - }, - "0.2053": { - "vector": [0, -0.05577, -0.06511] - }, - "0.2899": { - "vector": [0, 0.74062, 0.11823] - }, - "0.3623": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4589": { - "post": { - "vector": [0, -2.49224, -1.33745] - }, - "lerp_mode": "catmullrom" - }, - "0.5797": { - "post": { - "vector": [0, -0.26222, -1.14766] - }, - "lerp_mode": "catmullrom" + "0.5833": { + "vector": [0, 0.2, -0.27] } } } @@ -2545,7 +2639,35 @@ "anim.indoraptor.mouth": { "animation_length": 1.25, "bones": { - "jaw": { + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "yaw": { "rotation": { "0.0": { "post": { @@ -2596,7 +2718,7 @@ "vector": [37.5, 0, 0] }, "position": { - "vector": [0, 0, -9] + "vector": [0, 1, -1] } }, "Arms": { @@ -2667,36 +2789,6 @@ "vector": [27.5, 0, 0] } }, - "Head": { - "rotation": { - "vector": [17.5, 0, 0] - } - }, - "LeftThigh": { - "rotation": { - "vector": [0, 0, 15] - } - }, - "LeftLowerLeg": { - "rotation": { - "vector": [0, 0, 7.5] - } - }, - "LeftAnkle": { - "rotation": { - "vector": [35, 0, 0] - } - }, - "RightThigh": { - "rotation": { - "vector": [0, 0, -7.5] - } - }, - "RightLowerLeg": { - "rotation": { - "vector": [0, 0, 5] - } - }, "RightShoulder": { "rotation": { "vector": [0, 0, -5] @@ -2706,6 +2798,51 @@ "rotation": { "vector": [-0.79495, -2.12664, 4.4699] } + }, + "HandLEFT3": { + "rotation": { + "vector": [42.16108, -38.15468, 51.31861] + } + }, + "HandRIGHT2": { + "rotation": { + "vector": [100, 72.5, 0] + } + }, + "LeftThigh": { + "rotation": { + "vector": [7.5, 0, 17.5] + } + }, + "LeftLowerLeg": { + "rotation": { + "vector": [0, 0, 5] + } + }, + "LeftFoot": { + "rotation": { + "vector": [47.5, 0, 0] + } + }, + "RightThigh": { + "rotation": { + "vector": [0, 0, -5] + } + }, + "RightLowerLeg": { + "rotation": { + "vector": [0, 0, 5] + } + }, + "RightAnkle": { + "rotation": { + "vector": [-12.5, 0, 0] + } + }, + "RightFoot": { + "rotation": { + "vector": [65, 0, 0] + } } } }, @@ -2768,58 +2905,20 @@ } } }, - "Head": { + "yaw": { "rotation": { "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [0, 0, 0] }, - "0.25": { - "post": { - "vector": [-5.019, -4.98093, 0.43688] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [4.47596, 4.50457, 1.17442] - }, - "lerp_mode": "catmullrom" + "0.4167": { + "vector": [40, 0, 0] }, "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [32.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [0, 0, 0] } } } } } - }, - "geckolib_format_version": 2 + } } \ No newline at end of file diff --git a/common/src/main/resources/assets/jurassicrevived/animations/titanosaurus.animation.json b/common/src/main/resources/assets/jurassicrevived/animations/titanosaurus.animation.json index bfc63df..7bad430 100755 --- a/common/src/main/resources/assets/jurassicrevived/animations/titanosaurus.animation.json +++ b/common/src/main/resources/assets/jurassicrevived/animations/titanosaurus.animation.json @@ -2511,407 +2511,6 @@ } } }, - "anim.titanosaurus.attack": { - "animation_length": 1.5, - "bones": { - "tail1": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail9": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail10": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.125": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck1": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [3.11019, 12.94769, 5.2835] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "root": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -75, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 15, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck5": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [2.40038, 18.02662, 7.85663] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck6": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck7": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [3.23397, 8.75249, 17.39803] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "lowerjaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, -22.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail8": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [0, -27.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, -27.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail5": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [0, -22.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail6": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [0, -15, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail7": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -15, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, "anim.titanosaurus.run": { "loop": true, "animation_length": 2.1154, @@ -5398,6 +4997,407 @@ } } }, + "anim.titanosaurus.attack": { + "animation_length": 1.5, + "bones": { + "tail1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail9": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail10": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [3.11019, 12.94769, 5.2835] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.40038, 18.02662, 7.85663] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck7": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [3.23397, 8.75249, 17.39803] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail8": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail7": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, "anim.titanosaurus.idle": { "loop": true, "animation_length": 4, @@ -6343,6 +6343,5 @@ } } } - }, - "geckolib_format_version": 2 + } } \ No newline at end of file diff --git a/common/src/main/resources/assets/jurassicrevived/geo/arambourgiania.geo.json b/common/src/main/resources/assets/jurassicrevived/geo/arambourgiania.geo.json index 24cd36e..3f4e7ff 100755 --- a/common/src/main/resources/assets/jurassicrevived/geo/arambourgiania.geo.json +++ b/common/src/main/resources/assets/jurassicrevived/geo/arambourgiania.geo.json @@ -4,7 +4,7 @@ { "description": { "identifier": "geometry.arambourgiania", - "texture_width": 256, + "texture_width": 128, "texture_height": 128, "visible_bounds_width": 5, "visible_bounds_height": 4.5, @@ -21,7 +21,7 @@ "pivot": [0, 17.33, 3.93], "rotation": [-27, 0, 0], "cubes": [ - {"origin": [-3.5, 10.33, -1.07], "size": [7, 7, 9], "uv": [50, 62]} + {"origin": [-3.5, 10.33, -1.07], "size": [7, 7, 9], "uv": [36, 16]} ] }, { @@ -30,7 +30,7 @@ "pivot": [0, 17.33, 0.93], "rotation": [5, 0, 0], "cubes": [ - {"origin": [-4.5, 9.83, -8.07], "size": [9, 8, 8], "uv": [50, 82]} + {"origin": [-4.5, 9.83, -8.07], "size": [9, 8, 8], "uv": [36, 0]} ] }, { @@ -39,7 +39,7 @@ "pivot": [-4.04048, 15.3164, -4.79746], "rotation": [37.13272, 10.57684, 19.99393], "cubes": [ - {"origin": [-5.70715, 12.4164, -6.23079], "size": [3, 6, 3], "uv": [120, 25]} + {"origin": [-5.70715, 12.4164, -6.23079], "size": [3, 6, 3], "uv": [68, 36]} ] }, { @@ -48,7 +48,7 @@ "pivot": [-3.70715, 17.4164, -4.43079], "rotation": [-18, 0, 0], "cubes": [ - {"origin": [-3.70715, 10.4164, -4.43079], "size": [0, 7, 4], "uv": [137, 25]} + {"origin": [-3.70715, 10.4164, -4.43079], "size": [0, 7, 4], "uv": [16, 71]} ] }, { @@ -57,7 +57,7 @@ "pivot": [-4.20715, 13.1164, -5.23079], "rotation": [-57.39, 0, -9], "cubes": [ - {"origin": [-5.20715, 5.1164, -6.23079], "size": [2, 8, 2], "uv": [120, 44]} + {"origin": [-5.20715, 5.1164, -6.23079], "size": [2, 8, 2], "uv": [0, 72]} ] }, { @@ -66,7 +66,7 @@ "pivot": [-3.50715, 13.3164, -4.53079], "rotation": [0, -6, 0], "cubes": [ - {"origin": [-3.50715, 5.3164, -4.53079], "size": [0, 8, 4], "uv": [137, 44]} + {"origin": [-3.50715, 5.3164, -4.53079], "size": [0, 8, 4], "uv": [8, 71]} ] }, { @@ -75,7 +75,7 @@ "pivot": [-4.20715, 6.4164, -5.23079], "rotation": [48.17379, -8.45144, -7.14688], "cubes": [ - {"origin": [-5.20715, -5.5836, -6.23079], "size": [2, 12, 2], "uv": [120, 66]} + {"origin": [-5.20715, -5.5836, -6.23079], "size": [2, 12, 2], "uv": [56, 70]} ] }, { @@ -84,7 +84,7 @@ "pivot": [-3.30715, 6.4164, -5.23079], "rotation": [0, -17, 0], "cubes": [ - {"origin": [-3.30715, -3.5836, -5.23079], "size": [0, 10, 4], "uv": [137, 66]} + {"origin": [-3.30715, -3.5836, -5.23079], "size": [0, 10, 4], "uv": [70, 0]} ] }, { @@ -93,7 +93,7 @@ "pivot": [-4.20715, -4.7836, -6.23079], "rotation": [-2, 0, -8], "cubes": [ - {"origin": [-4.70715, -5.7836, -8.23079], "size": [1, 1, 2], "uv": [0, 0]} + {"origin": [-4.70715, -5.7836, -8.23079], "size": [1, 1, 2], "uv": [50, 73]} ] }, { @@ -102,7 +102,7 @@ "pivot": [-4.40715, -4.7836, -6.23079], "rotation": [0, -26, 0], "cubes": [ - {"origin": [-3.90715, -5.7836, -8.23079], "size": [1, 1, 2], "uv": [0, 0]} + {"origin": [-3.90715, -5.7836, -8.23079], "size": [1, 1, 2], "uv": [50, 73]} ] }, { @@ -111,7 +111,7 @@ "pivot": [-4.00715, -4.7836, -6.23079], "rotation": [0, 26, 0], "cubes": [ - {"origin": [-5.50715, -5.7836, -8.23079], "size": [1, 1, 2], "uv": [0, 0]} + {"origin": [-5.50715, -5.7836, -8.23079], "size": [1, 1, 2], "uv": [50, 73]} ] }, { @@ -120,7 +120,7 @@ "pivot": [-4.20715, -4.5836, -5.43079], "rotation": [-52.43263, -36.86392, -23.49182], "cubes": [ - {"origin": [-4.20715, -4.5836, -6.43079], "size": [1, 30, 2], "uv": [12, 0]} + {"origin": [-4.20715, -4.5836, -6.43079], "size": [1, 30, 2], "uv": [8, 38]} ] }, { @@ -128,7 +128,7 @@ "parent": "RightArm4", "pivot": [-3.40715, -2.6836, -6.13079], "cubes": [ - {"origin": [-3.40715, -2.6836, -10.13079], "size": [0, 30, 4], "uv": [0, 0]} + {"origin": [-3.40715, -2.6836, -10.13079], "size": [0, 30, 4], "uv": [0, 38]} ] }, { @@ -137,7 +137,7 @@ "pivot": [4.46326, 15.52261, -4.86715], "rotation": [38.37961, 1.35887, -20.09468], "cubes": [ - {"origin": [3.12993, 12.62261, -6.30048], "size": [3, 6, 3], "uv": [120, 25]} + {"origin": [3.12993, 12.62261, -6.30048], "size": [3, 6, 3], "uv": [68, 36]} ] }, { @@ -146,7 +146,7 @@ "pivot": [4.12993, 17.62261, -4.50048], "rotation": [-18, 0, 0], "cubes": [ - {"origin": [4.12993, 10.62261, -4.50048], "size": [0, 7, 4], "uv": [137, 25]} + {"origin": [4.12993, 10.62261, -4.50048], "size": [0, 7, 4], "uv": [16, 71]} ] }, { @@ -155,7 +155,7 @@ "pivot": [4.62993, 13.32261, -5.30048], "rotation": [-57.39, 0, 9], "cubes": [ - {"origin": [3.62993, 5.32261, -6.30048], "size": [2, 8, 2], "uv": [120, 44]} + {"origin": [3.62993, 5.32261, -6.30048], "size": [2, 8, 2], "uv": [0, 72]} ] }, { @@ -164,7 +164,7 @@ "pivot": [5.32993, 13.52261, -4.60048], "rotation": [0, -6, 0], "cubes": [ - {"origin": [5.32993, 5.52261, -4.60048], "size": [0, 8, 4], "uv": [137, 44]} + {"origin": [5.32993, 5.52261, -4.60048], "size": [0, 8, 4], "uv": [8, 71]} ] }, { @@ -173,7 +173,7 @@ "pivot": [4.62993, 6.62261, -5.30048], "rotation": [47.17, 4, 6], "cubes": [ - {"origin": [3.62993, -5.37739, -6.30048], "size": [2, 12, 2], "uv": [120, 66]} + {"origin": [3.62993, -5.37739, -6.30048], "size": [2, 12, 2], "uv": [56, 70]} ] }, { @@ -182,7 +182,7 @@ "pivot": [5.52993, 6.62261, -5.30048], "rotation": [0, -17, 0], "cubes": [ - {"origin": [5.52993, -3.37739, -5.30048], "size": [0, 10, 4], "uv": [137, 66]} + {"origin": [5.52993, -3.37739, -5.30048], "size": [0, 10, 4], "uv": [70, 0]} ] }, { @@ -191,7 +191,7 @@ "pivot": [4.62993, -4.57739, -6.30048], "rotation": [-2, 0, 8], "cubes": [ - {"origin": [4.12993, -5.57739, -8.30048], "size": [1, 1, 2], "uv": [0, 0]} + {"origin": [4.12993, -5.57739, -8.30048], "size": [1, 1, 2], "uv": [50, 73]} ] }, { @@ -200,7 +200,7 @@ "pivot": [4.42993, -4.57739, -6.30048], "rotation": [0, -26, 0], "cubes": [ - {"origin": [4.92993, -5.57739, -8.30048], "size": [1, 1, 2], "uv": [0, 0]} + {"origin": [4.92993, -5.57739, -8.30048], "size": [1, 1, 2], "uv": [50, 73]} ] }, { @@ -209,7 +209,7 @@ "pivot": [4.82993, -4.57739, -6.30048], "rotation": [0, 26, 0], "cubes": [ - {"origin": [3.32993, -5.57739, -8.30048], "size": [1, 1, 2], "uv": [0, 0]} + {"origin": [3.32993, -5.57739, -8.30048], "size": [1, 1, 2], "uv": [50, 73]} ] }, { @@ -218,7 +218,7 @@ "pivot": [4.62993, -4.37739, -5.50048], "rotation": [-54.11725, 30.15627, 20.88275], "cubes": [ - {"origin": [3.62993, -4.37739, -6.50048], "size": [1, 30, 2], "uv": [12, 0]} + {"origin": [3.62993, -4.37739, -6.50048], "size": [1, 30, 2], "uv": [8, 38]} ] }, { @@ -226,7 +226,7 @@ "parent": "LeftArm4", "pivot": [3.82993, -2.47739, -6.20048], "cubes": [ - {"origin": [3.82993, -2.47739, -10.20048], "size": [0, 30, 4], "uv": [0, 0]} + {"origin": [3.82993, -2.47739, -10.20048], "size": [0, 30, 4], "uv": [0, 38]} ] }, { @@ -235,7 +235,7 @@ "pivot": [0, 14.2, -6.07], "rotation": [-5, 0, 0], "cubes": [ - {"origin": [-3.5, 10.2, -10.07], "size": [7, 7, 3], "uv": [50, 101]} + {"origin": [-3.5, 10.2, -10.07], "size": [7, 7, 3], "uv": [56, 60]} ] }, { @@ -244,7 +244,7 @@ "pivot": [0, 14.4, -9.27], "rotation": [-15, 0, 0], "cubes": [ - {"origin": [-2.53, 10.3, -15.94], "size": [5, 6, 7], "uv": [53, 114]} + {"origin": [-2.53, 10.3, -15.94], "size": [5, 6, 7], "uv": [14, 58]} ] }, { @@ -253,7 +253,7 @@ "pivot": [0, 14.6, -15.44], "rotation": [78, 0, 0], "cubes": [ - {"origin": [-2, 13.5, -19.11], "size": [4, 8, 5], "uv": [17, 70]} + {"origin": [-2, 13.5, -19.11], "size": [4, 8, 5], "uv": [38, 60]} ] }, { @@ -262,7 +262,7 @@ "pivot": [0, 23.2, -16.84], "rotation": [-10, 0, 0], "cubes": [ - {"origin": [-1.5, 20.9, -18.51], "size": [3, 6, 4], "uv": [97, 86]} + {"origin": [-1.5, 20.9, -18.51], "size": [3, 6, 4], "uv": [68, 16]} ] }, { @@ -271,7 +271,7 @@ "pivot": [0, 27, -15.74], "rotation": [-23.48, 0, 0], "cubes": [ - {"origin": [-2.5, 22, -21.74], "size": [5, 7, 7], "uv": [159, 112]} + {"origin": [-2.5, 22, -21.74], "size": [5, 7, 7], "uv": [40, 46]} ] }, { @@ -279,7 +279,7 @@ "parent": "Head", "pivot": [0, 25.2, -20.04], "cubes": [ - {"origin": [-1.5, 23.2, -30.04], "size": [3, 2, 10], "uv": [7, 112]} + {"origin": [-1.5, 23.2, -30.04], "size": [3, 2, 10], "uv": [14, 46]} ] }, { @@ -288,7 +288,7 @@ "pivot": [0, 23.2, -30.04], "rotation": [-2, 0, 0], "cubes": [ - {"origin": [-1, 23.2, -36.04], "size": [2, 2, 6], "uv": [0, 99]} + {"origin": [-1, 23.2, -36.04], "size": [2, 2, 6], "uv": [64, 46]} ] }, { @@ -297,7 +297,7 @@ "pivot": [0, 25.5, -18.91], "rotation": [4, 0, 0], "cubes": [ - {"origin": [-2, 25.4, -30.91], "size": [4, 2, 12], "uv": [193, 112]} + {"origin": [-2, 25.4, -30.91], "size": [4, 2, 12], "uv": [36, 32]} ] }, { @@ -306,7 +306,7 @@ "pivot": [0, 26.3, -30.61], "rotation": [-4, 0, 0], "cubes": [ - {"origin": [-1.5, 25.3, -36.61], "size": [3, 2, 6], "uv": [19, 94]} + {"origin": [-1.5, 25.3, -36.61], "size": [3, 2, 6], "uv": [14, 38]} ] }, { @@ -315,7 +315,7 @@ "pivot": [0, 27, -19.01], "rotation": [4.93, 0, 0], "cubes": [ - {"origin": [-1, 27, -35.01], "size": [2, 2, 16], "uv": [90, 105]} + {"origin": [-1, 27, -35.01], "size": [2, 2, 16], "uv": [0, 20]} ] }, { @@ -324,7 +324,7 @@ "pivot": [0, 30.1, -20.01], "rotation": [15, 0, 0], "cubes": [ - {"origin": [-0.5, 29.1, -32.28], "size": [1, 3, 17], "uv": [128, 84]} + {"origin": [-0.5, 29.1, -32.28], "size": [1, 3, 17], "uv": [0, 0]} ] }, { @@ -333,7 +333,7 @@ "pivot": [0, 14.96, 7.46], "rotation": [-11, 0, 0], "cubes": [ - {"origin": [-2.5, 12.96, 7.46], "size": [5, 4, 2], "uv": [18, 40]} + {"origin": [-2.5, 12.96, 7.46], "size": [5, 4, 2], "uv": [64, 54]} ] }, { @@ -342,7 +342,7 @@ "pivot": [0, 14.86, 8.46], "rotation": [-12, 0, 0], "cubes": [ - {"origin": [-1.5, 13.86, 8.46], "size": [3, 3, 3], "uv": [21, 32]} + {"origin": [-1.5, 13.86, 8.46], "size": [3, 3, 3], "uv": [24, 76]} ] }, { @@ -351,7 +351,7 @@ "pivot": [0, 15.56, 10.96], "rotation": [-9, 0, 0], "cubes": [ - {"origin": [-1, 14.56, 10.96], "size": [2, 2, 4], "uv": [21, 23]} + {"origin": [-1, 14.56, 10.96], "size": [2, 2, 4], "uv": [38, 73]} ] }, { @@ -360,7 +360,7 @@ "pivot": [-4, 14, 2], "rotation": [-35, 0, 0], "cubes": [ - {"origin": [-6, 8, 1], "size": [4, 7, 3], "uv": [108, 0]} + {"origin": [-6, 8, 1], "size": [4, 7, 3], "uv": [68, 26]} ] }, { @@ -369,7 +369,7 @@ "pivot": [-4, 8.5, 3], "rotation": [71, 0, 0], "cubes": [ - {"origin": [-5.5, 3.5, 2], "size": [3, 6, 3], "uv": [90, 0]} + {"origin": [-5.5, 3.5, 2], "size": [3, 6, 3], "uv": [64, 70]} ] }, { @@ -378,7 +378,7 @@ "pivot": [-4, 4.1, 4], "rotation": [-48, 0, 0], "cubes": [ - {"origin": [-5, -1.9, 3], "size": [2, 6, 2], "uv": [77, 0]} + {"origin": [-5, -1.9, 3], "size": [2, 6, 2], "uv": [76, 60]} ] }, { @@ -387,7 +387,7 @@ "pivot": [-4, -1.1, 4], "rotation": [11, 0, 0], "cubes": [ - {"origin": [-5.5, -2.1, 1], "size": [3, 1, 4], "uv": [55, 41]} + {"origin": [-5.5, -2.1, 1], "size": [3, 1, 4], "uv": [24, 71]} ] }, { @@ -396,7 +396,7 @@ "pivot": [4, 14, 2], "rotation": [-35, 0, 0], "cubes": [ - {"origin": [2, 8, 1], "size": [4, 7, 3], "uv": [108, 0], "mirror": true} + {"origin": [2, 8, 1], "size": [4, 7, 3], "uv": [68, 26], "mirror": true} ] }, { @@ -405,7 +405,7 @@ "pivot": [4, 8.5, 3], "rotation": [71, 0, 0], "cubes": [ - {"origin": [2.5, 3.5, 2], "size": [3, 6, 3], "uv": [90, 0], "mirror": true} + {"origin": [2.5, 3.5, 2], "size": [3, 6, 3], "uv": [64, 70], "mirror": true} ] }, { @@ -414,7 +414,7 @@ "pivot": [4, 4.1, 4], "rotation": [-48, 0, 0], "cubes": [ - {"origin": [3, -1.9, 3], "size": [2, 6, 2], "uv": [77, 0], "mirror": true} + {"origin": [3, -1.9, 3], "size": [2, 6, 2], "uv": [76, 60], "mirror": true} ] }, { @@ -423,7 +423,7 @@ "pivot": [4, -1.1, 4], "rotation": [11, 0, 0], "cubes": [ - {"origin": [2.5, -2.1, 1], "size": [3, 1, 4], "uv": [55, 41], "mirror": true} + {"origin": [2.5, -2.1, 1], "size": [3, 1, 4], "uv": [24, 71], "mirror": true} ] } ] diff --git a/common/src/main/resources/assets/jurassicrevived/geo/compsognathus.geo.json b/common/src/main/resources/assets/jurassicrevived/geo/compsognathus.geo.json index 36d52ac..bccbaf8 100755 --- a/common/src/main/resources/assets/jurassicrevived/geo/compsognathus.geo.json +++ b/common/src/main/resources/assets/jurassicrevived/geo/compsognathus.geo.json @@ -4,321 +4,312 @@ { "description": { "identifier": "geometry.compsognathus", - "texture_width": 128, + "texture_width": 64, "texture_height": 64, - "visible_bounds_width": 6, - "visible_bounds_height": 3.5, - "visible_bounds_offset": [0, 1.25, 0] + "visible_bounds_width": 5, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] }, "bones": [ { - "name": "root", - "pivot": [0, 72, 0] + "name": "Root", + "pivot": [0, 11.7, 0] }, { - "name": "abdomen", - "parent": "root", - "pivot": [0.1, 13.46, 4.03], - "rotation": [-1.53, 0, 0], + "name": "Body1", + "parent": "Root", + "pivot": [0, 11.7, 0], + "rotation": [-10, 0, 0], "cubes": [ - {"origin": [-2.4, 11.07, 0.97], "size": [5, 5, 5], "uv": [47, 38]} + {"origin": [-2.5, 8.7, -3], "size": [5, 6, 6], "uv": [0, 0]} ] }, { - "name": "Tail1", - "parent": "abdomen", - "pivot": [0.1, 15.88, 5.78], - "rotation": [-3.4, 0, 0], + "name": "Body2", + "parent": "Body1", + "pivot": [0, 14.45, -3], + "rotation": [7.5, 0, 0], "cubes": [ - {"origin": [-1.9, 11.88, 5.78], "size": [4, 4, 7], "uv": [44, 19]} + {"origin": [-2, 9.45, -7], "size": [4, 5, 4], "uv": [23, 0]} ] }, { - "name": "Tail2", - "parent": "Tail1", - "pivot": [0.1, 15.58, 12.48], - "rotation": [2.98363, 0, 0], + "name": "Body3", + "parent": "Body2", + "pivot": [0, 14.45, -7], + "rotation": [7.5, 0, 0], "cubes": [ - {"origin": [-1.4, 12.58, 12.48], "size": [3, 3, 7], "uv": [66, 20]} - ] - }, - { - "name": "Tail3", - "parent": "Tail2", - "pivot": [0.1, 15.28, 18.58], - "rotation": [3.67407, 0, 0], - "cubes": [ - {"origin": [-0.9, 13.28, 18.58], "size": [2, 2, 7], "uv": [0, 31]} - ] - }, - { - "name": "Tail4", - "parent": "Tail3", - "pivot": [0.1, 15.08, 24.68], - "rotation": [1.27482, 0, 0], - "cubes": [ - {"origin": [-0.4, 14.08, 24.68], "size": [1, 1, 8], "uv": [0, 40]} - ] - }, - { - "name": "Tail5", - "parent": "Tail4", - "pivot": [0.1, 15.08, 32.38], - "rotation": [3.25979, 0, 0], - "cubes": [ - {"origin": [-0.4, 14.08, 32.38], "size": [1, 1, 6], "uv": [0, 49]} - ] - }, - { - "name": "Upperbody", - "parent": "abdomen", - "pivot": [0, 16.56, 1.85], - "rotation": [-5.6, 0, 0], - "cubes": [ - {"origin": [-3, 10.56, -4.38], "size": [6, 6, 6], "uv": [0, 14]} + {"origin": [-2, 9.45, -10], "size": [4, 5, 3], "inflate": -0.005, "uv": [23, 50]} ] }, { "name": "Neck1", - "parent": "Upperbody", - "pivot": [0, 15.73, -3.7], - "rotation": [-38.77, 0, 0], + "parent": "Body3", + "pivot": [0, 12.95, -10], + "rotation": [-32.5, 0, 0], "cubes": [ - {"origin": [-2, 11.71, -5.12], "size": [4, 4, 4], "uv": [80, 0]} + {"origin": [-1.5, 11.45, -12], "size": [3, 3, 3], "uv": [36, 32]} ] }, { "name": "Neck2", "parent": "Neck1", - "pivot": [0, 12.70779, -4.41404], - "rotation": [143.48, 0, 0], + "pivot": [0, 11.95, -12], + "rotation": [-37.5, 0, 0], "cubes": [ - {"origin": [-1.5, 10.70779, -4.41404], "size": [3, 3, 5], "uv": [60, 0]} + {"origin": [-1, 11.95, -16], "size": [2, 2, 4], "uv": [38, 10]} ] }, { "name": "Neck3", "parent": "Neck2", - "pivot": [0, 11.32652, 0.02405], - "rotation": [-13.87, 0, 0], + "pivot": [0, 13.85, -15.5], + "rotation": [-15, 0, 0], "cubes": [ - {"origin": [-1, 11.3105, -0.19551], "size": [2, 2, 3], "uv": [44, 0]} + {"origin": [-1, 11.85, -17.5], "size": [2, 2, 2], "inflate": -0.005, "uv": [48, 45]} ] }, { "name": "Neck4", "parent": "Neck3", - "pivot": [0, 11.81449, 2.70493], - "rotation": [-79.36, 0, 0], + "pivot": [0, 13.85, -17.5], + "rotation": [22.5, 0, 0], "cubes": [ - {"origin": [-1, 11.81449, 1.21493], "size": [2, 2, 2], "uv": [0, 7]} + {"origin": [-1, 11.85, -18.5], "size": [2, 2, 1], "inflate": -0.01, "uv": [28, 41]} ] }, { "name": "Neck5", "parent": "Neck4", - "pivot": [0.2, 13.81449, 3.20493], - "rotation": [20.5, 0, 0], + "pivot": [0, 13.85, -18.5], + "rotation": [22.5, 0, 0], "cubes": [ - {"origin": [-1, 13.81449, 1.20493], "size": [2, 2, 2], "uv": [10, 1]} + {"origin": [-1, 11.85, -19.5], "size": [2, 2, 1], "inflate": -0.015, "uv": [49, 6]} ] }, { "name": "Neck6", "parent": "Neck5", - "pivot": [0.2, 15.81449, 3.20493], - "rotation": [14.65, 0, 0], + "pivot": [0, 13.85, -19.5], + "rotation": [27.5, 0, 0], "cubes": [ - {"origin": [-1, 15.81449, 1.20493], "size": [2, 2, 2], "uv": [10, 1]} - ] - }, - { - "name": "Neck7", - "parent": "Neck6", - "pivot": [0.2, 17.80449, 3.20493], - "rotation": [14.61, 0, 0], - "cubes": [ - {"origin": [-1, 17.80449, 1.20493], "size": [2, 3, 2], "uv": [9, 7]} + {"origin": [-1, 11.85, -20.5], "size": [2, 2, 1], "inflate": -0.02, "uv": [49, 6]} ] }, { "name": "Head", - "parent": "Neck7", - "pivot": [0, 19.70449, 2.25493], - "rotation": [-130.48, 0, 0], + "parent": "Neck6", + "pivot": [0, 13.90176, -20.30681], + "rotation": [15, 0, 0], "cubes": [ - {"origin": [-1.5, 16.70449, 0.75493], "size": [3, 3, 3], "uv": [25, 54]} + {"origin": [-1.5, 10.90176, -22.30681], "size": [3, 3, 2], "uv": [28, 45]}, + {"origin": [-1, 12.00262, -26.24487], "size": [2, 1, 4], "uv": [38, 17]}, + {"origin": [-1, 11.02762, -26.24487], "size": [2, 1, 4], "inflate": -0.02, "uv": [0, 42]}, + {"origin": [-1, 12.60495, -26.30685], "size": [2, 1, 4], "inflate": -0.01, "pivot": [0, 13.70176, -22.28181], "rotation": [7, 0, 0], "uv": [36, 39]} ] }, { - "name": "LowerJaw", + "name": "Jaw", "parent": "Head", - "pivot": [-0.1, 16.90449, 2.65493], - "rotation": [82.75, 0, 0], + "pivot": [0, 11.97085, -22.25976], + "rotation": [10, 0, 0], "cubes": [ - {"origin": [-1.1, 15.90449, -1.34507], "size": [2, 1, 4], "uv": [32, 8]} + {"origin": [-1, 11.07123, -26.34348], "size": [2, 1, 4], "inflate": -0.1, "pivot": [0, 11.17085, -22.33476], "rotation": [-15, 0, 0], "uv": [40, 0]} ] }, { - "name": "UpperJaw", + "name": "Eyes", "parent": "Head", - "pivot": [0, 17.70449, 1.75493], - "rotation": [89.2, 0, 0], + "pivot": [0, 13.15176, -21.55681], "cubes": [ - {"origin": [-1.5, 16.70449, -3.24507], "size": [3, 1, 4], "uv": [27, 1]} + {"origin": [-1.525, 12.65176, -22.05681], "size": [0, 1, 1], "uv": [28, 10]}, + {"origin": [1.525, 12.65176, -22.05681], "size": [0, 1, 1], "uv": [28, 10], "mirror": true} ] }, { - "name": "UpperPiece1", - "parent": "UpperJaw", - "pivot": [0, 18.10449, 1.95493], - "rotation": [10.42, 0, 0], - "cubes": [ - {"origin": [-1, 17.60449, -3.04507], "size": [2, 1, 4], "uv": [46, 8]} - ] - }, - { - "name": "Teeth", + "name": "NeckFlap", "parent": "Head", - "pivot": [0, 17.70449, 1.65493], - "rotation": [89.2, 0, 0], + "pivot": [0, 10.66221, -20.8288], + "rotation": [7.5, 0, 0], "cubes": [ - {"origin": [-1.5, 15.70449, -3.34507], "size": [3, 1, 4], "uv": [27, 24]} + {"origin": [-1, 10.66221, -21.8538], "size": [2, 1, 3], "inflate": -0.01, "pivot": [0, 10.66221, -20.8538], "rotation": [-22.5, 0, 0], "uv": [13, 47]} ] }, { - "name": "NeckUnder", - "parent": "Head", - "pivot": [-0.3, 21.12449, 4.05493], - "rotation": [153.84, 0, 0], + "name": "LeftShoulder", + "parent": "Body3", + "pivot": [2.5, 10.45, -9], + "rotation": [45.43855, 7.05302, 7.10708], "cubes": [ - {"origin": [-0.5, 21.42449, 3.05493], "size": [1, 3, 2], "uv": [20, 7]} + {"origin": [2, 7.95, -9.5], "size": [1, 3, 1], "uv": [49, 37]} ] }, { - "name": "Rightarm", - "parent": "Upperbody", - "pivot": [3, 11.1, -2.86], - "rotation": [50.09, 0, 0], + "name": "LeftElbow", + "parent": "LeftShoulder", + "pivot": [3, 7.97591, -8.55167], + "rotation": [5, 0, 0], "cubes": [ - {"origin": [3, 9.1, -3.66], "size": [1, 3, 1], "uv": [93, 25]} + {"origin": [2, 7.97591, -11.55167], "size": [1, 1, 3], "inflate": -0.005, "uv": [0, 48]} ] }, { - "name": "Rightforearm", - "parent": "Rightarm", - "pivot": [3.5, 9.5, -3.16], - "rotation": [-114.78, 0, 0], + "name": "LeftHand", + "parent": "LeftElbow", + "pivot": [2.5, 8.38368, -11.56025], + "rotation": [-40, 0, 0], "cubes": [ - {"origin": [3, 5.5, -3.66], "size": [1, 4, 1], "uv": [93, 31]} + {"origin": [2, 6.88368, -12.06025], "size": [1, 2, 1], "uv": [48, 50]}, + {"origin": [2, 4.88368, -12.06025], "size": [1, 2, 1], "pivot": [2.5, 6.88368, -12.06025], "rotation": [22.5, 0, 0], "uv": [51, 10]}, + {"origin": [2, 5.63368, -12.06025], "size": [1, 2, 1], "pivot": [2, 7.63368, -12.06025], "rotation": [22.5, 0, 40], "uv": [51, 14]}, + {"origin": [2, 5.63368, -12.06025], "size": [1, 2, 1], "pivot": [3, 7.63368, -12.06025], "rotation": [22.5, 0, -40], "uv": [51, 18]} ] }, { - "name": "Righthand", - "parent": "Rightforearm", - "pivot": [4.1, 5.6, -3.56], - "rotation": [100.79, 0, 28.7], + "name": "RightShoulder", + "parent": "Body3", + "pivot": [-2.5, 10.45, -9], + "rotation": [45.43855, -7.05302, -7.10708], "cubes": [ - {"origin": [2.5, 3.8, -4.16], "size": [2, 2, 1], "pivot": [3.5, 4.8, -3.66], "rotation": [-2.81288, -27.37729, 5.62719], "uv": [0, 3]} + {"origin": [-3, 7.95, -9.5], "size": [1, 3, 1], "uv": [49, 37], "mirror": true} ] }, { - "name": "Leftarm", - "parent": "Upperbody", - "pivot": [-3, 11.1, -2.86], - "rotation": [50.09, 0, 0], + "name": "RightElbow", + "parent": "RightShoulder", + "pivot": [-3, 7.97591, -8.55167], + "rotation": [5, 0, 0], "cubes": [ - {"origin": [-4, 9.1, -3.66], "size": [1, 3, 1], "uv": [93, 25]} + {"origin": [-3, 7.97591, -11.55167], "size": [1, 1, 3], "inflate": -0.005, "uv": [0, 48], "mirror": true} ] }, { - "name": "Leftforearm", - "parent": "Leftarm", - "pivot": [-3.5, 9.5, -3.16], - "rotation": [-114.78, 0, 0], + "name": "RightHand", + "parent": "RightElbow", + "pivot": [-2.5, 8.38368, -11.56025], + "rotation": [-40, 0, 0], "cubes": [ - {"origin": [-4, 5.5, -3.66], "size": [1, 4, 1], "uv": [93, 31]} + {"origin": [-3, 6.88368, -12.06025], "size": [1, 2, 1], "uv": [48, 50], "mirror": true}, + {"origin": [-3, 4.88368, -12.06025], "size": [1, 2, 1], "pivot": [-2.5, 6.88368, -12.06025], "rotation": [22.5, 0, 0], "uv": [51, 10], "mirror": true}, + {"origin": [-3, 5.63368, -12.06025], "size": [1, 2, 1], "pivot": [-2, 7.63368, -12.06025], "rotation": [22.5, 0, -40], "uv": [51, 14], "mirror": true}, + {"origin": [-3, 5.63368, -12.06025], "size": [1, 2, 1], "pivot": [-3, 7.63368, -12.06025], "rotation": [22.5, 0, 40], "uv": [51, 18], "mirror": true} ] }, { - "name": "Lefthand", - "parent": "Leftforearm", - "pivot": [-3.2, 5.2, -3.56], - "rotation": [100.79, 0, -28.7], + "name": "Tail1", + "parent": "Body1", + "pivot": [0, 14.45, 3], + "rotation": [2.5, 0, 0], "cubes": [ - {"origin": [-4.3, 3.3, -3.36], "size": [2, 2, 1], "pivot": [-3.3, 4.3, -2.86], "rotation": [-2.59775, 27.38656, -5.63304], "uv": [0, 3]} + {"origin": [-2, 10.45, 2], "size": [4, 4, 5], "uv": [0, 13]} ] }, { - "name": "Leftthigh", - "parent": "root", - "pivot": [4.6, 13.4599, 4.03236], - "rotation": [-24.39, 0, 0], + "name": "Tail2", + "parent": "Tail1", + "pivot": [0, 14.2, 7], + "rotation": [7.5, 0, 0], "cubes": [ - {"origin": [2.4, 7.46065, 3.03471], "size": [2, 7, 3], "pivot": [3.4, 10.96065, 4.53471], "rotation": [175, 0, 180], "uv": [115, 14], "mirror": true} + {"origin": [-1.5, 11.2, 6], "size": [3, 3, 6], "uv": [19, 13]} ] }, { - "name": "Leftmidleg", - "parent": "Leftthigh", - "pivot": [3.6, 8.7599, 4.03236], - "rotation": [62.11, 0, 0], + "name": "Tail3", + "parent": "Tail2", + "pivot": [0, 14.1332, 11.804], + "rotation": [-2.5, 0, 0], "cubes": [ - {"origin": [3.1, 3.4599, 3.03236], "size": [1, 5, 2], "uv": [105, 0]} + {"origin": [-1, 12.1332, 10.804], "size": [2, 2, 6], "uv": [19, 32]} ] }, { - "name": "Leftshin", - "parent": "Leftmidleg", - "pivot": [3.6, 3.8481, 3.82337], - "rotation": [-63.45, 0, 0], + "name": "Tail4", + "parent": "Tail3", + "pivot": [0, 14.1171, 16.75801], + "rotation": [-2.5, 0, 0], "cubes": [ - {"origin": [3.1, -1.58603, 3.42252], "size": [1, 6, 1], "uv": [34, 16]} + {"origin": [-1, 12.1171, 16.75801], "size": [2, 2, 6], "inflate": -0.005, "uv": [19, 23]} ] }, { - "name": "Leftfoot", - "parent": "Leftshin", - "pivot": [3.6, -0.48603, 4.52252], - "rotation": [25.07, 0, 0], + "name": "Tail5", + "parent": "Tail4", + "pivot": [0, 13.84391, 22.72044], + "rotation": [-7.5, 0, 0], "cubes": [ - {"origin": [2.6, -1.48603, 1.52252], "size": [2, 1, 3], "uv": [26, 31]} + {"origin": [-0.5, 12.84391, 22.22044], "size": [1, 1, 8], "uv": [0, 23]} ] }, { - "name": "Rightthigh", - "parent": "root", - "pivot": [-4.4, 13.46065, 4.03471], - "rotation": [-24.39, 0, 0], + "name": "LeftLeg", + "parent": "Root", + "pivot": [2, 11.2, 0], + "rotation": [-10, 0, -2.5], "cubes": [ - {"origin": [-4.4, 7.46065, 3.03471], "size": [2, 7, 3], "pivot": [-3.4, 10.96065, 4.53471], "rotation": [0, 180, 0], "uv": [115, 14]} + {"origin": [0.5, 7.7, -1.5], "size": [3, 5, 3], "uv": [36, 23]} ] }, { - "name": "Rightmidleg", - "parent": "Rightthigh", - "pivot": [-3.4, 8.76065, 4.03471], - "rotation": [62.11, 0, 0], + "name": "LeftKnee", + "parent": "LeftLeg", + "pivot": [3, 7.7, -1.5], + "rotation": [40, 0, 2.5], "cubes": [ - {"origin": [-3.9, 3.46065, 3.03471], "size": [1, 5, 2], "uv": [105, 0], "mirror": true} + {"origin": [1, 2.7, -1.5], "size": [2, 5, 2], "uv": [39, 45]} ] }, { - "name": "Rightshin", - "parent": "Rightmidleg", - "pivot": [-3.4, 3.84885, 3.82572], - "rotation": [-63.45, 0, 0], + "name": "LeftCalf", + "parent": "LeftKnee", + "pivot": [2, 2.7, 0.25], + "rotation": [-40, 0, 0], "cubes": [ - {"origin": [-3.9, -1.58528, 3.42487], "size": [1, 6, 1], "uv": [34, 16], "mirror": true} + {"origin": [1.5, -1.3, -0.75], "size": [1, 4, 1], "uv": [49, 31]} ] }, { - "name": "Rightfoot", - "parent": "Rightshin", - "pivot": [-3.4, -0.48528, 4.52487], - "rotation": [25.07, 0, 0], + "name": "LeftFoot", + "parent": "LeftCalf", + "pivot": [2, -1.55, -0.25], + "rotation": [10, 0, 0], "cubes": [ - {"origin": [-4.4, -1.48528, 1.52487], "size": [2, 1, 3], "uv": [26, 31], "mirror": true} + {"origin": [1, -2.05, -2.75], "size": [2, 1, 3], "uv": [39, 5]} + ] + }, + { + "name": "RightLeg", + "parent": "Root", + "pivot": [-2, 11.2, 0], + "rotation": [-10, 0, 2.5], + "cubes": [ + {"origin": [-3.5, 7.7, -1.5], "size": [3, 5, 3], "uv": [36, 23], "mirror": true} + ] + }, + { + "name": "RightKnee", + "parent": "RightLeg", + "pivot": [-3, 7.7, -1.5], + "rotation": [40, 0, -2.5], + "cubes": [ + {"origin": [-3, 2.7, -1.5], "size": [2, 5, 2], "uv": [39, 45], "mirror": true} + ] + }, + { + "name": "RightCalf", + "parent": "RightKnee", + "pivot": [-2, 2.7, 0.25], + "rotation": [-40, 0, 0], + "cubes": [ + {"origin": [-2.5, -1.3, -0.75], "size": [1, 4, 1], "uv": [49, 31], "mirror": true} + ] + }, + { + "name": "RightFoot", + "parent": "RightCalf", + "pivot": [-2, -1.55, -0.25], + "rotation": [10, 0, 0], + "cubes": [ + {"origin": [-3, -2.05, -2.75], "size": [2, 1, 3], "uv": [39, 5], "mirror": true} ] } ] diff --git a/common/src/main/resources/assets/jurassicrevived/geo/corythosaurus.geo.json b/common/src/main/resources/assets/jurassicrevived/geo/corythosaurus.geo.json index 51a02cf..b55c401 100755 --- a/common/src/main/resources/assets/jurassicrevived/geo/corythosaurus.geo.json +++ b/common/src/main/resources/assets/jurassicrevived/geo/corythosaurus.geo.json @@ -13,337 +13,446 @@ "bones": [ { "name": "root", - "pivot": [0, 16.8, 0] - }, - { - "name": "RightThigh", - "parent": "root", - "pivot": [11, 25.6, 2.3], - "rotation": [58.88, 0, 0], - "cubes": [ - {"origin": [6, 17.7, -11.6], "size": [5, 10, 20], "uv": [121, 165]} - ] - }, - { - "name": "RightCalf1", - "parent": "RightThigh", - "pivot": [8.5, 22.6, -7.2], - "rotation": [-28.22, 0, 0], - "cubes": [ - {"origin": [7, 11.6, -11.3], "size": [3, 11, 5], "uv": [90, 200]} - ] - }, - { - "name": "RightUpperFoot", - "parent": "RightCalf1", - "pivot": [8, 15.7, -7.9], - "rotation": [-55.46, 0, 0], - "cubes": [ - {"origin": [7.1, 7.2, -7.4], "size": [3, 8, 3], "uv": [80, 220]} - ] - }, - { - "name": "FootRight", - "parent": "RightUpperFoot", - "pivot": [8.5, 8.5, -5.2], - "rotation": [-155.99, 0, 0], - "cubes": [ - {"origin": [6.5, 8.5, -6.2], "size": [4, 2, 6], "uv": [135, 200]} - ] - }, - { - "name": "LeftThigh", - "parent": "root", - "pivot": [-11, 25.6, 2.3], - "rotation": [58.88, 0, 0], - "cubes": [ - {"origin": [-11, 17.7, -11.6], "size": [5, 10, 20], "uv": [65, 165]} - ] - }, - { - "name": "LeftCalf1", - "parent": "LeftThigh", - "pivot": [-8.5, 22.6, -7.2], - "rotation": [-28.22, 0, 0], - "cubes": [ - {"origin": [-10, 11.6, -11.3], "size": [3, 11, 5], "uv": [65, 200]} - ] - }, - { - "name": "LeftUpperFoot", - "parent": "LeftCalf1", - "pivot": [-9.1, 15.7, -7.9], - "rotation": [-55.46, 0, 0], - "cubes": [ - {"origin": [-10.1, 7.2, -7.4], "size": [3, 8, 3], "uv": [65, 220]} - ] - }, - { - "name": "FootLeft", - "parent": "LeftUpperFoot", - "pivot": [-8.5, 8.5, -5.2], - "rotation": [-155.9, 0, 0], - "cubes": [ - {"origin": [-10.5, 8.5, -6.2], "size": [4, 2, 6], "uv": [110, 200]} - ] - }, - { - "name": "Body3", - "parent": "root", - "pivot": [3, 25.7, 4.7], - "rotation": [-0.31, 0, 0], - "cubes": [ - {"origin": [-8.5, 19.7, -0.5], "size": [17, 16, 11], "uv": [9, 13]} - ] - }, - { - "name": "Tail1", - "parent": "Body3", - "pivot": [1, 34.7, 5.9], - "rotation": [1.06, 0, 0], - "cubes": [ - {"origin": [-5.5, 21.7, 7.9], "size": [11, 13, 12], "uv": [0, 92]} - ] - }, - { - "name": "Tail2", - "parent": "Tail1", - "pivot": [0, 34.2, 19.1], - "rotation": [-1.25, 0, 0], - "cubes": [ - {"origin": [-4, 24.2, 19.1], "size": [8, 10, 10], "uv": [48, 98]} - ] - }, - { - "name": "Tail3", - "parent": "Tail2", - "pivot": [0, 33.6, 27.1], - "rotation": [-1.52, 0, 0], - "cubes": [ - {"origin": [-3, 26.6, 27.1], "size": [6, 7, 12], "uv": [89, 100]} - ] - }, - { - "name": "Tail4", - "parent": "Tail3", - "pivot": [0, 33.4, 38.4], - "rotation": [-2.74, 0, 0], - "cubes": [ - {"origin": [-2, 27.4, 38.4], "size": [4, 6, 10], "uv": [126, 100]} - ] - }, - { - "name": "Tail5", - "parent": "Tail4", - "pivot": [0, 32.9, 46.4], - "rotation": [-4.55, 0, 0], - "cubes": [ - {"origin": [-1.5, 28.9, 46.4], "size": [3, 4, 12], "uv": [157, 99]} - ] - }, - { - "name": "Tail6", - "parent": "Tail5", - "pivot": [0, 32.7, 55.3], - "rotation": [-2.21, 0, 0], - "cubes": [ - {"origin": [-1, 29.7, 56.1], "size": [2, 3, 10], "uv": [191, 102]} - ] + "pivot": [0, 24, 0] }, { "name": "Body1", - "parent": "Body3", - "pivot": [3, 32.6, -11.9], - "rotation": [7.71, 0, 0], + "parent": "root", + "pivot": [0, 23.7, 2.8], + "rotation": [1.93, 0, 0], "cubes": [ - {"origin": [-7.5, 15.6, -21.9], "size": [15, 19, 22], "uv": [73, 5]} + {"origin": [-8, 16.64, -3.24], "size": [16, 18, 11], "uv": [56, 44]} ] }, { "name": "Body2", "parent": "Body1", - "pivot": [1, 33.9, -20.3], - "rotation": [7.14, 0, 0], + "pivot": [0, 25.14, 0.06], + "rotation": [8.51, 0, 0], "cubes": [ - {"origin": [-5, 16.9, -26.3], "size": [10, 17, 8], "uv": [151, 15]} + {"origin": [-7.5, 17.14, -13.94], "size": [15, 18, 13], "uv": [0, 44]} ] }, { - "name": "Neck", + "name": "Body3", "parent": "Body2", - "pivot": [1, 31.6, -25.3], - "rotation": [0.36, 0, -0.48], + "pivot": [0, 25.84, -12.14], + "rotation": [11.87, 0, 0], "cubes": [ - {"origin": [-3.5, 17.6, -29.6], "size": [7, 14, 7], "uv": [0, 139]} + {"origin": [-6.5, 18.84, -20.84], "size": [13, 16, 9], "uv": [56, 73]} + ] + }, + { + "name": "Neck1", + "parent": "Body3", + "pivot": [0, 33.04, -21.64], + "rotation": [3.6, 0, 0], + "cubes": [ + {"origin": [-4.5, 19.14, -25.94], "size": [9, 14, 7], "uv": [60, 98]} ] }, { "name": "Neck2", - "parent": "Neck", - "pivot": [0.5, 26.1, -27.2], - "rotation": [-14.99, 0, 0], + "parent": "Neck1", + "pivot": [0, 27.74, -23.54], + "rotation": [-12.51, 0, 0], "cubes": [ - {"origin": [-3, 18.1, -32.2], "size": [6, 8, 5], "uv": [34, 154]} + {"origin": [-3, 19.74, -28.54], "size": [6, 8, 5], "uv": [60, 119]} ] }, { "name": "Neck3", "parent": "Neck2", - "pivot": [0, 24.4, -29.3], - "rotation": [-11.88, 0, 0], + "pivot": [0, 25.64, -25.54], + "rotation": [-20.43, 0, 0], "cubes": [ - {"origin": [-2.5, 18.4, -34.3], "size": [5, 6, 5], "uv": [62, 145]} + {"origin": [-2.5, 19.64, -30.54], "size": [5, 6, 5], "uv": [40, 125]} + ] + }, + { + "name": "Neck4", + "parent": "Neck3", + "pivot": [0, 22.54, -29.74], + "rotation": [-12.86, 0, 0], + "cubes": [ + {"origin": [-2.5, 19.54, -30.74], "size": [5, 6, 1], "inflate": 0.01, "uv": [42, 136]} + ] + }, + { + "name": "Neck5", + "parent": "Neck4", + "pivot": [0, 22.51, -30.34], + "rotation": [-6.84, 0, 0], + "cubes": [ + {"origin": [-2.5, 19.51, -31.34], "size": [5, 6, 1], "inflate": 0.01, "uv": [30, 136]} ] }, { "name": "Neck6", - "parent": "Neck3", - "pivot": [0, 22, -35.1], - "rotation": [-10.59961, 0, 0], + "parent": "Neck5", + "pivot": [0, 22.41, -30.14], + "rotation": [-3.96, 0, 0], "cubes": [ - {"origin": [-2.5, 19.5, -40.8], "size": [5, 5, 7], "uv": [107, 148]} + {"origin": [-2.5, 19.41, -32.14], "size": [5, 6, 1], "inflate": 0.01, "uv": [18, 136]} + ] + }, + { + "name": "Neck7", + "parent": "Neck6", + "pivot": [0, 22.23, -30.74], + "rotation": [-7.2, 0, 0], + "cubes": [ + {"origin": [-2.5, 19.23, -32.74], "size": [5, 6, 1], "uv": [42, 88]} + ] + }, + { + "name": "Neck8", + "parent": "Neck7", + "pivot": [0, 22.45, -31.24], + "rotation": [10.08, 0, 0], + "cubes": [ + {"origin": [-2.5, 19.45, -33.24], "size": [5, 6, 1], "inflate": 0.01, "uv": [132, 130]} + ] + }, + { + "name": "Neck9", + "parent": "Neck8", + "pivot": [0, 22.5, -32.04], + "rotation": [2.16, 0, 0], + "cubes": [ + {"origin": [-2.5, 19.5, -34.04], "size": [5, 6, 1], "uv": [60, 132]} + ] + }, + { + "name": "Neck10", + "parent": "Neck9", + "pivot": [0, 22.63, -32.64], + "rotation": [6.48, 0, 0], + "cubes": [ + {"origin": [-2.5, 19.63, -34.64], "size": [5, 6, 1], "inflate": 0.01, "uv": [132, 36]} + ] + }, + { + "name": "Neck11", + "parent": "Neck10", + "pivot": [0, 22.76, -33.24], + "rotation": [6.48, 0, 0], + "cubes": [ + {"origin": [-2.5, 19.76, -35.24], "size": [5, 6, 1], "uv": [120, 130]} + ] + }, + { + "name": "Neck12", + "parent": "Neck11", + "pivot": [0, 22.89, -33.84], + "rotation": [6.48, 0, 0], + "cubes": [ + {"origin": [-2.5, 19.89, -35.84], "size": [5, 6, 1], "uv": [108, 130]} + ] + }, + { + "name": "Neck13", + "parent": "Neck12", + "pivot": [0, 23.02, -34.44], + "rotation": [6.48, 0, 0], + "cubes": [ + {"origin": [-2.5, 20.02, -36.44], "size": [5, 6, 1], "uv": [96, 130]} ] }, { "name": "Head", - "parent": "Neck6", - "pivot": [0, 24.7, -40.7], - "rotation": [33.91, 0, 0], + "parent": "Neck13", + "pivot": [0, 26.12, -37.44], + "rotation": [25.47, 0, 0], "cubes": [ - {"origin": [-3, 19.7, -47.7], "size": [6, 5, 7], "uv": [0, 197]} + {"origin": [-3, 20.12, -43.44], "size": [6, 6, 7], "uv": [114, 23]} ] }, { "name": "Snout1", "parent": "Head", - "pivot": [0, 24, -45.7], + "pivot": [0, 24.92, -41.44], "cubes": [ - {"origin": [-2.5, 21, -51.7], "size": [5, 3, 4], "uv": [29, 202]} + {"origin": [-2.5, 21.92, -47.44], "size": [5, 3, 4], "uv": [100, 90]} ] }, { "name": "Snout2", "parent": "Snout1", - "pivot": [0, 24.7, -45.7], - "rotation": [7.18, 0, 0], + "pivot": [0, 23.02, -47.04], + "rotation": [8.64, 0, 0], "cubes": [ - {"origin": [-2, 22.7, -51.7], "size": [4, 2, 5], "uv": [29, 190]} + {"origin": [-3, 22.02, -49.04], "size": [6, 3, 2], "uv": [126, 108]} ] }, { - "name": "Jaw", + "name": "Jaw1", "parent": "Head", - "pivot": [0.5, 20.1, -47.2], - "rotation": [177.54, 0, 0], + "pivot": [0.5, 21.32, -42.84], + "rotation": [-2.61, 0, 0], "cubes": [ - {"origin": [-2, 19.1, -47.2], "size": [4, 1, 4], "uv": [29, 214]} + {"origin": [-2, 20.32, -46.84], "size": [4, 2, 4], "uv": [120, 17]} ] }, { - "name": "Crest1", - "parent": "Head", - "pivot": [-0.5, 22, -50.2], - "rotation": [106.17, 0, 0], + "name": "Jaw2", + "parent": "Jaw1", + "pivot": [0.5, 21.32, -46.74], + "rotation": [-5.22, 0, 0], "cubes": [ - {"origin": [-0.5, 18, -50.2], "size": [1, 4, 2], "uv": [0, 170]} + {"origin": [-2, 20.32, -48.74], "size": [4, 2, 2], "uv": [126, 113]} + ] + }, + { + "name": "Throat", + "parent": "Head", + "pivot": [-0.5, 22.22, -36.44], + "rotation": [-29.06, 0, 0], + "cubes": [ + {"origin": [-2, 18.22, -39.34], "size": [4, 4, 7], "uv": [18, 125]} + ] + }, + { + "name": "Snout3", + "parent": "Head", + "pivot": [0, 24.14, -42.84], + "rotation": [15.84, 0, 0], + "cubes": [ + {"origin": [-2, 24.14, -47.84], "size": [4, 2, 5], "uv": [114, 36]} ] }, { "name": "Crestmembrane2", "parent": "Head", - "pivot": [-2, 23.8, -43.4], + "pivot": [-2, 25.22, -40.14], "rotation": [-166.54, 0, 0], "cubes": [ - {"origin": [-0.5, 18.8, -46.2], "size": [1, 5, 6], "uv": [0, 185]} + {"origin": [-0.5, 20.22, -42.94], "size": [1, 5, 6], "uv": [82, 130]}, + {"origin": [-0.5, 18.22, -41.94], "size": [1, 1, 4], "uv": [130, 85]} ] }, { "name": "Crestmembrane", "parent": "Crestmembrane2", - "pivot": [-2, 18.8, -42.7], + "pivot": [-2, 20.22, -39.44], "cubes": [ - {"origin": [-0.5, 17.8, -45.5], "size": [1, 1, 5], "uv": [0, 180]} - ] - }, - { - "name": "NeckMerge", - "parent": "Neck", - "pivot": [0, 30.4, -28.5], - "rotation": [48.72, 0, 0], - "cubes": [ - {"origin": [-2.5, 25.4, -33.5], "size": [5, 5, 5], "uv": [33, 139]} - ] - }, - { - "name": "UpperArmLeft", - "parent": "Body1", - "pivot": [-5, 18.9, -20.4], - "rotation": [-88.45, 0, 0], - "cubes": [ - {"origin": [-8, 14.9, -20.4], "size": [3, 4, 9], "uv": [31, 45]} - ] - }, - { - "name": "LowerArmLeft", - "parent": "UpperArmLeft", - "pivot": [-6.5, 16.2, -13.4], - "rotation": [42.57, 0, 0], - "cubes": [ - {"origin": [-7.5, 7.2, -13.4], "size": [2, 9, 2], "uv": [21, 60]} - ] - }, - { - "name": "LeftHand", - "parent": "LowerArmLeft", - "pivot": [-6.5, 6.3, -12.3], - "rotation": [29.63, 0, 0], - "cubes": [ - {"origin": [-8, 4.3, -12.8], "size": [3, 3, 1], "uv": [15, 76]} - ] - }, - { - "name": "LeftFingers", - "parent": "LeftHand", - "pivot": [-6.5, 4.5, -13.4], - "rotation": [-74.73, 0, 0], - "cubes": [ - {"origin": [-8, 4.5, -13.9], "size": [3, 1, 1], "uv": [15, 87]} + {"origin": [-0.5, 19.22, -42.44], "size": [1, 1, 5], "uv": [136, 17]} ] }, { "name": "UpperArmRight", - "parent": "Body1", - "pivot": [5, 18.9, -20.4], - "rotation": [-88.45, 0, 0], + "parent": "Neck1", + "pivot": [4, 20.29, -22.83], + "rotation": [-90, 0, 0.4], "cubes": [ - {"origin": [5, 14.9, -20.4], "size": [3, 4, 9], "uv": [0, 45]} + {"origin": [4, 18.35, -24.77], "size": [3, 4, 9], "uv": [92, 117]} ] }, { "name": "LowerArmRight", "parent": "UpperArmRight", - "pivot": [6.5, 16.2, -13.4], - "rotation": [42.57, 0, 0], + "pivot": [5.5, 21.14, -17.68], + "rotation": [26.57, 0, 0], "cubes": [ - {"origin": [5.5, 7.2, -13.4], "size": [2, 9, 2], "uv": [0, 60]} + {"origin": [4.5, 12.14, -17.68], "size": [2, 9, 2], "uv": [82, 119]} ] }, { "name": "RightHand", "parent": "LowerArmRight", - "pivot": [6.5, 6.3, -12.3], + "pivot": [6, 11.24, -16.58], "rotation": [29.63, 0, 0], "cubes": [ - {"origin": [5, 4.3, -12.8], "size": [3, 3, 1], "uv": [0, 76]} + {"origin": [4, 9.24, -17.08], "size": [3, 3, 1], "uv": [118, 90]} ] }, { "name": "RightFingers", "parent": "RightHand", - "pivot": [6.5, 4.5, -13.5], + "pivot": [6, 9.44, -17.78], "rotation": [-74.73, 0, 0], "cubes": [ - {"origin": [5, 4.5, -14], "size": [3, 1, 1], "uv": [0, 87]} + {"origin": [4, 9.44, -18.28], "size": [3, 1, 1], "uv": [42, 95]} + ] + }, + { + "name": "UpperArmLeft", + "parent": "Neck1", + "pivot": [-4, 20.29, -22.83], + "rotation": [-90, 0, 0.4], + "cubes": [ + {"origin": [-7, 18.35, -24.77], "size": [3, 4, 9], "uv": [116, 117]} + ] + }, + { + "name": "LowerArmLeft", + "parent": "UpperArmLeft", + "pivot": [-5.5, 21.14, -17.68], + "rotation": [26.57, 0, 0], + "cubes": [ + {"origin": [-6.5, 12.14, -17.68], "size": [2, 9, 2], "uv": [72, 132]} + ] + }, + { + "name": "LeftHand", + "parent": "LowerArmLeft", + "pivot": [-5, 11.24, -16.58], + "rotation": [29.63, 0, 0], + "cubes": [ + {"origin": [-7, 9.24, -17.08], "size": [3, 3, 1], "uv": [118, 94]} + ] + }, + { + "name": "LeftFingers", + "parent": "LeftHand", + "pivot": [-5, 9.44, -17.78], + "rotation": [-74.73, 0, 0], + "cubes": [ + {"origin": [-7, 9.44, -18.28], "size": [3, 1, 1], "uv": [136, 43]} + ] + }, + { + "name": "Tail1", + "parent": "Body1", + "pivot": [0, 27.54, 6.86], + "rotation": [-1, 0, 0], + "cubes": [ + {"origin": [-6.5, 19.54, 6.86], "size": [13, 15, 8], "uv": [78, 0]} + ] + }, + { + "name": "Tail2", + "parent": "Tail1", + "pivot": [0, 28.34, 13.46], + "rotation": [-5.88, 0, 0], + "cubes": [ + {"origin": [-5.5, 21.34, 13.46], "size": [11, 13, 10], "uv": [0, 75]} + ] + }, + { + "name": "Tail3", + "parent": "Tail2", + "pivot": [0, 29.14, 22.76], + "rotation": [-3.16, 0, 0], + "cubes": [ + {"origin": [-4.5, 23.14, 22.76], "size": [9, 11, 9], "uv": [78, 23]} + ] + }, + { + "name": "Tail4", + "parent": "Tail3", + "pivot": [0, 29.94, 30.96], + "rotation": [-3.88, 0, 0], + "cubes": [ + {"origin": [-3.5, 24.94, 30.96], "size": [7, 9, 10], "uv": [92, 98]} + ] + }, + { + "name": "Tail5", + "parent": "Tail4", + "pivot": [0, 30.74, 40.26], + "rotation": [-3.96, 0, 0], + "cubes": [ + {"origin": [-2.5, 26.74, 40.26], "size": [5, 7, 10], "uv": [100, 73]} + ] + }, + { + "name": "Tail6", + "parent": "Tail5", + "pivot": [0, 31.14, 49.36], + "rotation": [-3.6, 0, 0], + "cubes": [ + {"origin": [-1.5, 28.64, 49.36], "size": [3, 5, 10], "uv": [110, 43]} + ] + }, + { + "name": "Tail7", + "parent": "Tail6", + "pivot": [0, 31.94, 58.76], + "rotation": [-4.68, 0, 0], + "cubes": [ + {"origin": [-1, 30.44, 58.76], "size": [2, 3, 11], "uv": [110, 58]} + ] + }, + { + "name": "Stomach", + "parent": "Body1", + "pivot": [0, 15.24, -9.04], + "rotation": [8.21, 0, 0], + "cubes": [ + {"origin": [-6, 14.24, -19.24], "size": [12, 17, 27], "uv": [0, 0]} + ] + }, + { + "name": "ThighLeft", + "parent": "root", + "pivot": [-7.5, 23.7, 2.8], + "rotation": [-23, 0, 0], + "cubes": [ + {"origin": [-10, 12.75, -1.93], "size": [5, 17, 10], "uv": [0, 98]} + ] + }, + { + "name": "LeftCalf1", + "parent": "ThighLeft", + "pivot": [-7.5, 12.87, -0.03], + "rotation": [58.47, 0, 0], + "cubes": [ + {"origin": [-9.5, 1.99, -0.69], "size": [4, 12, 5], "uv": [120, 0]} + ] + }, + { + "name": "LeftCalf2", + "parent": "LeftCalf1", + "pivot": [-7.5, 3.24, 2.14], + "rotation": [-54.33, 0, 0], + "cubes": [ + {"origin": [-9, -4.64, 0.14], "size": [3, 9, 4], "uv": [42, 75]} + ] + }, + { + "name": "LeftFoot", + "parent": "LeftCalf2", + "pivot": [-7.5, -3.99, 3.61], + "rotation": [18.26, 0, 0], + "cubes": [ + {"origin": [-10, -4.99, -2.89], "size": [5, 2, 7], "uv": [126, 90]} + ] + }, + { + "name": "ThighRight", + "parent": "root", + "pivot": [7.5, 23.7, 2.8], + "rotation": [-23, 0, 0], + "cubes": [ + {"origin": [5, 12.75, -1.93], "size": [5, 17, 10], "uv": [30, 98]} + ] + }, + { + "name": "RightCalf1", + "parent": "ThighRight", + "pivot": [7.5, 12.87, -0.03], + "rotation": [58.47, 0, 0], + "cubes": [ + {"origin": [5.5, 1.99, -0.69], "size": [4, 12, 5], "uv": [0, 125]} + ] + }, + { + "name": "RightCalf2", + "parent": "RightCalf1", + "pivot": [7.5, 3.24, 2.14], + "rotation": [-54.33, 0, 0], + "cubes": [ + {"origin": [6, -4.64, 0.14], "size": [3, 9, 4], "uv": [130, 72]} + ] + }, + { + "name": "RightFoot", + "parent": "RightCalf2", + "pivot": [7.5, -3.99, 3.61], + "rotation": [18.26, 0, 0], + "cubes": [ + {"origin": [5, -4.99, -2.89], "size": [5, 2, 7], "uv": [126, 99]} ] } ] diff --git a/common/src/main/resources/assets/jurassicrevived/geo/diplodocus.geo.json b/common/src/main/resources/assets/jurassicrevived/geo/diplodocus.geo.json index ab3f0a3..02a830e 100755 --- a/common/src/main/resources/assets/jurassicrevived/geo/diplodocus.geo.json +++ b/common/src/main/resources/assets/jurassicrevived/geo/diplodocus.geo.json @@ -174,7 +174,7 @@ "rotation": [7.38, 0, 0], "cubes": [ {"origin": [-7, 14.8, -10.5], "size": [14, 18, 12], "uv": [0, 34]}, - {"origin": [0, 22.3, -9.5], "size": [0, 15, 12], "uv": [36, 93]} + {"origin": [0, 22.3, -9.5], "size": [0, 15, 12], "uv": [102, 0]} ] }, { @@ -184,7 +184,7 @@ "rotation": [7.38, 0, 0], "cubes": [ {"origin": [-6.5, 14.1, -21], "size": [13, 17, 12], "uv": [52, 34]}, - {"origin": [0, 21.6, -19.5], "size": [0, 14, 12], "uv": [102, 17]} + {"origin": [0, 21.6, -19.5], "size": [0, 14, 12], "uv": [70, 102]} ] }, { @@ -193,7 +193,7 @@ "pivot": [-3.6, 20.1, -14.5], "rotation": [7.83, 0, 0], "cubes": [ - {"origin": [-8.6, 11.6, -19], "size": [5, 11, 6], "uv": [22, 141]} + {"origin": [-8.6, 11.6, -19], "size": [5, 11, 6], "uv": [122, 139]} ] }, { @@ -202,7 +202,7 @@ "pivot": [-6.1, 12.6, -13.7], "rotation": [-39.14, 0, 0], "cubes": [ - {"origin": [-8.1, 2.6, -17], "size": [4, 10, 4], "uv": [158, 34]} + {"origin": [-8.1, 2.6, -17], "size": [4, 10, 4], "uv": [16, 158]} ] }, { @@ -220,7 +220,7 @@ "pivot": [3.5, 20.1, -14.5], "rotation": [7.83, 0, 0], "cubes": [ - {"origin": [3.5, 11.6, -19], "size": [5, 11, 6], "uv": [144, 77]} + {"origin": [3.5, 11.6, -19], "size": [5, 11, 6], "uv": [26, 141]} ] }, { @@ -229,7 +229,7 @@ "pivot": [6, 12.6, -13.7], "rotation": [-39.14, 0, 0], "cubes": [ - {"origin": [4, 2.6, -17], "size": [4, 10, 4], "uv": [162, 0]} + {"origin": [4, 2.6, -17], "size": [4, 10, 4], "uv": [158, 27]} ] }, { @@ -256,8 +256,8 @@ "pivot": [0, 30.7, -25.5], "rotation": [-2.61, 0, 0], "cubes": [ - {"origin": [-5, 18.7, -29.5], "size": [10, 12, 6], "uv": [102, 43]}, - {"origin": [0, 23, -29.5], "size": [0, 12, 6], "uv": [102, 151]} + {"origin": [-5, 18.7, -29.5], "size": [10, 12, 6], "uv": [102, 27]}, + {"origin": [0, 23, -29.5], "size": [0, 12, 6], "uv": [32, 158]} ] }, { @@ -267,7 +267,7 @@ "rotation": [-2.61, 0, 0], "cubes": [ {"origin": [-4.5, 20.6, -34.5], "size": [9, 10, 6], "uv": [118, 61]}, - {"origin": [0, 23.9, -34.5], "size": [0, 11, 6], "uv": [164, 146]} + {"origin": [0, 23.9, -34.5], "size": [0, 11, 6], "uv": [164, 119]} ] }, { @@ -276,8 +276,8 @@ "pivot": [0, 30.5, -34.45], "rotation": [-2.61, 0, 0], "cubes": [ - {"origin": [-4, 21.5, -39.7], "size": [8, 9, 6], "uv": [124, 96]}, - {"origin": [0, 24.8, -39.7], "size": [0, 10, 6], "uv": [166, 77]} + {"origin": [-4, 21.5, -39.7], "size": [8, 9, 6], "uv": [26, 126]}, + {"origin": [0, 24.8, -39.7], "size": [0, 10, 6], "uv": [44, 165]} ] }, { @@ -286,8 +286,8 @@ "pivot": [0, 30.4, -39.55], "rotation": [-2.61, 0, 0], "cubes": [ - {"origin": [-3.5, 22.4, -44.8], "size": [7, 8, 6], "uv": [136, 0]}, - {"origin": [0, 25.7, -44.8], "size": [0, 9, 6], "uv": [166, 110]} + {"origin": [-3.5, 22.4, -44.8], "size": [7, 8, 6], "uv": [78, 139]}, + {"origin": [0, 25.7, -44.8], "size": [0, 9, 6], "uv": [84, 167]} ] }, { @@ -296,8 +296,8 @@ "pivot": [0, 30.3, -44.8], "rotation": [-2.61, 0, 0], "cubes": [ - {"origin": [-3, 23.3, -51.3], "size": [6, 7, 8], "uv": [122, 118]}, - {"origin": [0, 26.6, -51.3], "size": [0, 8, 8], "uv": [152, 94]} + {"origin": [-3, 23.3, -51.3], "size": [6, 7, 8], "uv": [126, 0]}, + {"origin": [0, 26.6, -51.3], "size": [0, 8, 8], "uv": [122, 156]} ] }, { @@ -306,8 +306,8 @@ "pivot": [0, 30.2, -51], "rotation": [-2.61, 0, 0], "cubes": [ - {"origin": [-2.5, 24.2, -57.5], "size": [5, 6, 8], "uv": [66, 134]}, - {"origin": [0, 27.5, -57.5], "size": [0, 7, 8], "uv": [18, 158]} + {"origin": [-2.5, 24.2, -57.5], "size": [5, 6, 8], "uv": [0, 138]}, + {"origin": [0, 27.5, -57.5], "size": [0, 7, 8], "uv": [158, 12]} ] }, { @@ -316,8 +316,8 @@ "pivot": [0, 30.1, -57.4], "rotation": [-2.61, 0, 0], "cubes": [ - {"origin": [-2, 25.1, -63.9], "size": [4, 5, 8], "uv": [148, 52]}, - {"origin": [0, 28.3, -63.9], "size": [0, 6, 8], "uv": [134, 163]} + {"origin": [-2, 25.1, -63.9], "size": [4, 5, 8], "uv": [144, 136]}, + {"origin": [0, 28.3, -63.9], "size": [0, 6, 8], "uv": [102, 161]} ] }, { @@ -326,8 +326,8 @@ "pivot": [0, 30, -63.7], "rotation": [-2.61, 0, 0], "cubes": [ - {"origin": [-1.5, 26, -70.2], "size": [3, 4, 8], "uv": [148, 65]}, - {"origin": [0, 28.8, -69.4], "size": [0, 5, 8], "uv": [150, 163]} + {"origin": [-1.5, 26, -70.2], "size": [3, 4, 8], "uv": [154, 0]}, + {"origin": [0, 28.8, -69.4], "size": [0, 5, 8], "uv": [162, 149]} ] }, { @@ -336,7 +336,7 @@ "pivot": [0, 30, -70.2], "rotation": [9, 0, 0], "cubes": [ - {"origin": [-2, 26, -73.2], "size": [4, 4, 3], "uv": [60, 93]} + {"origin": [-2, 26, -73.2], "size": [4, 4, 3], "uv": [126, 106]} ] }, { @@ -344,8 +344,8 @@ "parent": "headpart1", "pivot": [0, 28.5, -71.7], "cubes": [ - {"origin": [-2.001, 28, -72.2], "size": [0, 1, 1], "uv": [48, 91]}, - {"origin": [2.001, 28, -72.2], "size": [0, 1, 1], "uv": [48, 91], "mirror": true} + {"origin": [-2.001, 28, -72.2], "size": [0, 1, 1], "uv": [42, 91]}, + {"origin": [2.001, 28, -72.2], "size": [0, 1, 1], "uv": [44, 91]} ] }, { @@ -354,7 +354,7 @@ "pivot": [0, 27.1, -72.35], "rotation": [-3.96, 0, 0], "cubes": [ - {"origin": [-1, 26.11727, -77.1006], "size": [2, 1, 4], "inflate": 0.01, "uv": [124, 111]} + {"origin": [-1, 26.11727, -77.1006], "size": [2, 1, 4], "inflate": 0.01, "uv": [126, 113]} ] }, { @@ -372,7 +372,7 @@ "pivot": [0, 30, -73.2], "rotation": [11.16, 0, 0], "cubes": [ - {"origin": [-1, 28, -77.2], "size": [2, 2, 4], "uv": [48, 120]} + {"origin": [-1, 28, -77.2], "size": [2, 2, 4], "uv": [70, 93]} ] }, { @@ -401,7 +401,7 @@ "rotation": [3.24, 0, 0], "cubes": [ {"origin": [-6, 19.1, 13.2], "size": [12, 15, 9], "uv": [60, 0]}, - {"origin": [0, 25.5, 13.2], "size": [0, 13, 9], "uv": [48, 134]} + {"origin": [0, 25.5, 13.2], "size": [0, 13, 9], "uv": [104, 139]} ] }, { @@ -411,7 +411,7 @@ "rotation": [-2.16, 0, 0], "cubes": [ {"origin": [-5.5, 21.9, 21.7], "size": [11, 12, 8], "uv": [0, 64]}, - {"origin": [0, 26.8, 19.7], "size": [0, 12, 8], "pivot": [0.5, 0.5, -2], "rotation": [-2.5, 0, 0], "uv": [150, 14]} + {"origin": [0, 26.8, 19.7], "size": [0, 12, 8], "pivot": [0.5, 0.5, -2], "rotation": [-2.5, 0, 0], "uv": [148, 67]} ] }, { @@ -421,7 +421,7 @@ "rotation": [1.44, 0, 0], "cubes": [ {"origin": [-5, 23.6, 29.2], "size": [10, 10, 8], "uv": [0, 84]}, - {"origin": [0, 27, 29.7], "size": [0, 11, 8], "uv": [150, 111]} + {"origin": [0, 27, 29.7], "size": [0, 11, 8], "uv": [0, 152]} ] }, { @@ -431,7 +431,7 @@ "rotation": [-0.72, 0, 0], "cubes": [ {"origin": [-4.5, 24.4, 36.4], "size": [9, 9, 9], "uv": [82, 84]}, - {"origin": [0, 27.8, 36.4], "size": [0, 10, 9], "uv": [116, 147]} + {"origin": [0, 27.8, 36.4], "size": [0, 10, 9], "uv": [48, 146]} ] }, { @@ -439,8 +439,8 @@ "parent": "tailpart4", "pivot": [0, 33.1, 44.3], "cubes": [ - {"origin": [-4, 25.1, 44.3], "size": [8, 8, 9], "uv": [102, 0]}, - {"origin": [0, 28.5, 43.3], "size": [0, 9, 9], "uv": [66, 148]} + {"origin": [-4, 25.1, 44.3], "size": [8, 8, 9], "uv": [0, 102]}, + {"origin": [0, 28.5, 43.3], "size": [0, 9, 9], "uv": [144, 149]} ] }, { @@ -449,8 +449,8 @@ "pivot": [0, 32.8, 53.3], "rotation": [-0.72, 0, 0], "cubes": [ - {"origin": [-3.5, 25.8, 53.3], "size": [7, 7, 9], "uv": [60, 118]}, - {"origin": [0, 29.2, 52.8], "size": [0, 8, 9], "uv": [84, 151]} + {"origin": [-3.5, 25.8, 53.3], "size": [7, 7, 9], "uv": [34, 110]}, + {"origin": [0, 29.2, 52.8], "size": [0, 8, 9], "uv": [66, 153]} ] }, { @@ -459,8 +459,8 @@ "pivot": [0, 32.6, 61.8], "rotation": [-1.8, 0, 0], "cubes": [ - {"origin": [-3, 26.6, 61.8], "size": [6, 6, 10], "uv": [92, 102]}, - {"origin": [0, 30, 61.8], "size": [0, 7, 10], "uv": [144, 146]} + {"origin": [-3, 26.6, 61.8], "size": [6, 6, 10], "uv": [94, 102]}, + {"origin": [0, 30, 61.8], "size": [0, 7, 10], "uv": [148, 50]} ] }, { @@ -469,8 +469,8 @@ "pivot": [0, 32.4, 71.3], "rotation": [-1.8, 0, 0], "cubes": [ - {"origin": [-2.5, 27.4, 71.3], "size": [5, 5, 11], "uv": [60, 102]}, - {"origin": [0, 33.8, 70.05], "size": [0, 6, 11], "pivot": [0.5, 3, -1.25], "rotation": [-2.5, 0, 0], "uv": [0, 140]} + {"origin": [-2.5, 27.4, 71.3], "size": [5, 5, 11], "uv": [102, 45]}, + {"origin": [0, 33.8, 70.05], "size": [0, 6, 11], "pivot": [0.5, 3, -1.25], "rotation": [-2.5, 0, 0], "uv": [142, 119]} ] }, { @@ -479,8 +479,8 @@ "pivot": [0, 32.2, 81.5], "rotation": [-1.8, 0, 0], "cubes": [ - {"origin": [-2, 28.2, 81.5], "size": [4, 4, 13], "uv": [0, 102]}, - {"origin": [0, 34.6, 80], "size": [0, 6, 13], "pivot": [0.5, 4, -1.5], "rotation": [-2.5, 0, 0], "uv": [118, 77]} + {"origin": [-2, 28.2, 81.5], "size": [4, 4, 13], "uv": [36, 93]}, + {"origin": [0, 34.6, 80], "size": [0, 6, 13], "pivot": [0.5, 4, -1.5], "rotation": [-2.5, 0, 0], "uv": [0, 119]} ] }, { @@ -489,8 +489,8 @@ "pivot": [0, 32, 93], "rotation": [-1.08, 0, 0], "cubes": [ - {"origin": [-1.5, 29, 93], "size": [3, 3, 12], "uv": [92, 118]}, - {"origin": [0, 30.4, 93], "size": [0, 6, 12], "uv": [92, 133]} + {"origin": [-1.5, 29, 93], "size": [3, 3, 12], "uv": [118, 77]}, + {"origin": [0, 30.4, 93], "size": [0, 6, 12], "uv": [54, 128]} ] }, { @@ -499,8 +499,8 @@ "pivot": [0, 31.8, 104.5], "rotation": [-3.24, 0, 0], "cubes": [ - {"origin": [-1, 29.8, 104.5], "size": [2, 2, 12], "uv": [116, 133]}, - {"origin": [0, 30.2, 104.5], "size": [0, 6, 12], "uv": [126, 17]} + {"origin": [-1, 29.8, 104.5], "size": [2, 2, 12], "uv": [126, 92]}, + {"origin": [0, 30.2, 104.5], "size": [0, 6, 12], "uv": [134, 15]} ] }, { @@ -509,8 +509,8 @@ "pivot": [0, 31.6, 114.8], "rotation": [-2.88, 0, 0], "cubes": [ - {"origin": [-0.5, 30.6, 114.8], "size": [1, 1, 12], "uv": [144, 133]}, - {"origin": [0, 31, 114.8], "size": [0, 5, 12], "uv": [134, 35]} + {"origin": [-0.5, 30.6, 114.8], "size": [1, 1, 12], "uv": [142, 106]}, + {"origin": [0, 31, 114.8], "size": [0, 5, 12], "uv": [134, 33]} ] }, { @@ -519,7 +519,7 @@ "pivot": [-4.5, 23.5, 8.5], "rotation": [-15, 0, 0], "cubes": [ - {"origin": [-9.5, 12, 4], "size": [5, 14, 7], "uv": [0, 119]} + {"origin": [-9.5, 12, 4], "size": [5, 14, 7], "uv": [94, 118]} ] }, { @@ -528,7 +528,7 @@ "pivot": [-7, 12, 4.5], "rotation": [25, 0, 0], "cubes": [ - {"origin": [-9, 3, 4.45], "size": [4, 9, 5], "uv": [44, 156]} + {"origin": [-9, 3, 4.45], "size": [4, 9, 5], "uv": [84, 153]} ] }, { @@ -537,7 +537,7 @@ "pivot": [-7, 3.1, 9.51], "rotation": [-13.04, 0, 0], "cubes": [ - {"origin": [-9, -2.9, 4.51], "size": [4, 6, 5], "uv": [166, 14]} + {"origin": [-9, -2.9, 4.51], "size": [4, 6, 5], "uv": [162, 162]} ] }, { @@ -546,7 +546,7 @@ "pivot": [4.5, 23.5, 8.5], "rotation": [-15, 0, 0], "cubes": [ - {"origin": [4.5, 12, 4], "size": [5, 14, 7], "uv": [24, 120]} + {"origin": [4.5, 12, 4], "size": [5, 14, 7], "uv": [118, 118]} ] }, { @@ -555,7 +555,7 @@ "pivot": [7, 12, 4.5], "rotation": [25, 0, 0], "cubes": [ - {"origin": [5, 3, 4.45], "size": [4, 9, 5], "uv": [0, 157]} + {"origin": [5, 3, 4.45], "size": [4, 9, 5], "uv": [154, 87]} ] }, { @@ -564,7 +564,7 @@ "pivot": [7, 3.1, 9.51], "rotation": [-13.04, 0, 0], "cubes": [ - {"origin": [5, -2.9, 4.51], "size": [4, 6, 5], "uv": [62, 166]} + {"origin": [5, -2.9, 4.51], "size": [4, 6, 5], "uv": [164, 67]} ] } ] diff --git a/common/src/main/resources/assets/jurassicrevived/geo/distortus_rex.geo.json b/common/src/main/resources/assets/jurassicrevived/geo/distortus_rex.geo.json index b998838..1005a14 100755 --- a/common/src/main/resources/assets/jurassicrevived/geo/distortus_rex.geo.json +++ b/common/src/main/resources/assets/jurassicrevived/geo/distortus_rex.geo.json @@ -7,8 +7,8 @@ "texture_width": 256, "texture_height": 256, "visible_bounds_width": 9, - "visible_bounds_height": 3.5, - "visible_bounds_offset": [0, 1.25, 0] + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] }, "bones": [ { @@ -21,114 +21,112 @@ "pivot": [0, 22.5, 6], "rotation": [-10, 0, 0], "cubes": [ - {"origin": [-6, 15, 1], "size": [12, 17, 10], "uv": [46, 31]} + {"origin": [-6, 15, 0], "size": [12, 20, 10], "uv": [46, 35]} ] }, { "name": "Body2", "parent": "Body1", "pivot": [0, 29.94535, 2.10791], - "rotation": [-2.5, 0, 0], + "rotation": [-10, 0, 0], "cubes": [ - {"origin": [-5.5, 15.20186, -8.99042], "size": [11, 17, 12], "uv": [0, 31]} + {"origin": [-5.5, 15.20186, -8.99042], "size": [11, 20, 12], "uv": [0, 35]} ] }, { "name": "Chest", "parent": "Body2", "pivot": [0, 29.63281, -9.03294], - "rotation": [7.5, 0, 0], + "rotation": [17.5, 0, 0], "cubes": [ - {"origin": [-6.5, 15.49061, -21.01582], "size": [13, 17, 14], "uv": [0, 0]} + {"origin": [-6.5, 14.49061, -21.01582], "size": [13, 21, 14], "uv": [0, 0]} ] }, { "name": "Neck2", "parent": "Chest", - "pivot": [0, 31.42524, -20.25657], - "rotation": [-5, 0, 0], + "pivot": [0, 34.42524, -20.25657], "cubes": [ - {"origin": [-4.5, 21.65019, -23.09599], "size": [9, 11, 5], "uv": [0, 83]} + {"origin": [-4.5, 23.65019, -24.09599], "size": [9, 12, 6], "uv": [86, 0]} ] }, { "name": "Neck3", "parent": "Neck2", - "pivot": [0, 32.38344, -21.17808], - "rotation": [-10, 0, 0], + "pivot": [0, 35.38344, -22.17808], + "rotation": [-5, 0, 0], "cubes": [ - {"origin": [-4.5, 21.47391, -23.94281], "size": [9, 11, 3], "inflate": 0.03, "uv": [24, 101]} + {"origin": [-4.5, 23.47391, -24.94281], "size": [9, 12, 3], "inflate": 0.03, "uv": [76, 102]} ] }, { "name": "neck", "parent": "Neck3", - "pivot": [0, 31.72219, -23.57631], + "pivot": [0, 34.72219, -24.57631], "rotation": [15, 0, 0], "cubes": [ - {"origin": [-4.5, 21.53841, -26.7216], "size": [9, 11, 3], "inflate": 0.02, "uv": [108, 88]} + {"origin": [-4.5, 24.53841, -27.7216], "size": [9, 11, 3], "inflate": 0.02, "uv": [0, 106]} ] }, { "name": "Neck4", "parent": "neck", - "pivot": [0, 32.32554, -26.34122], + "pivot": [0, 35.32554, -27.34122], "rotation": [-2.5, 0, 0], "cubes": [ - {"origin": [-4.5, 22.46414, -25.96953], "size": [9, 10, 2], "uv": [24, 115]} + {"origin": [-4.5, 25.46414, -26.96953], "size": [9, 10, 2], "uv": [112, 117]} ] }, { "name": "Neck5", "parent": "Neck4", - "pivot": [0, 31.86981, -29.82265], + "pivot": [0, 34.86981, -30.82265], "rotation": [12.5, 0, 0], "cubes": [ - {"origin": [-4.5, 20.78719, -29.58155], "size": [9, 11, 3], "inflate": 0.01, "uv": [0, 99]} + {"origin": [-4.5, 23.78719, -31.58155], "size": [9, 11, 4], "inflate": 0.01, "uv": [50, 91]} ] }, { "name": "Neck6", "parent": "Neck5", - "pivot": [0, 31.29049, -31.93669], + "pivot": [0, 34.29049, -32.93669], "rotation": [2.5, 0, 0], "cubes": [ - {"origin": [-4.5, 20.39185, -31.70368], "size": [9, 11, 3], "inflate": 0.0001, "uv": [56, 95]} + {"origin": [-4.5, 23.39185, -34.70368], "size": [9, 11, 5], "inflate": 0.0001, "uv": [0, 90]} ] }, { "name": "Head", "parent": "Neck6", - "pivot": [0, 31.16939, -31.78604], - "rotation": [7.5, 0, 0], + "pivot": [0, 34.16939, -31.78604], + "rotation": [-10, 0, 0], "cubes": [ - {"origin": [-3, 21.50884, -45.59044], "size": [6, 5, 6], "pivot": [0, 21.13384, -39.46544], "rotation": [-5, 0, 0], "uv": [0, 113]}, - {"origin": [-3, 20.50884, -45.46544], "size": [6, 1, 5], "pivot": [0, 20.13384, -39.46544], "rotation": [-5, 0, 0], "uv": [54, 24]}, - {"origin": [-2.5, 24.30886, -43.65467], "size": [5, 3, 1], "pivot": [0.5, 27.93925, -45.40467], "rotation": [12.5, 0, 0], "uv": [72, 130]}, - {"origin": [-4, 20.38384, -39.46544], "size": [8, 6, 7], "uv": [90, 45]}, - {"origin": [-4.5, 26.25884, -40.19044], "size": [9, 6, 7], "inflate": -0.01, "uv": [86, 75]}, - {"origin": [-4.5, 25.75884, -34.39044], "size": [9, 6, 5], "inflate": 0.09, "pivot": [0, 28.13384, -32.26544], "rotation": [-17.5, 0, 0], "uv": [92, 12]}, - {"origin": [-4, 26.15884, -45.59044], "size": [8, 6, 6], "inflate": -0.01, "pivot": [0.5, 28.53384, -40.46544], "rotation": [7.5, 0, 0], "uv": [92, 0]} + {"origin": [-2.5, 25.50884, -45], "size": [5, 4, 8], "pivot": [-1, 24.13384, -38.46544], "rotation": [7.5, 0, 0], "uv": [50, 106]}, + {"origin": [-3, 21.8, -45.59044], "size": [6, 2, 7], "pivot": [0, 19.13384, -38.46544], "rotation": [-2.5, 0, 0], "uv": [54, 26]}, + {"origin": [-3, 23.8, -45.59044], "size": [6, 3, 7], "pivot": [0, 22.13384, -38.46544], "rotation": [-2.5, 0, 0], "uv": [110, 92]}, + {"origin": [-2.5, 27.30886, -43.65467], "size": [5, 3, 1], "pivot": [0.5, 30.93925, -45.40467], "rotation": [12.5, 0, 0], "uv": [112, 50]}, + {"origin": [-4, 21.38384, -38.46544], "size": [8, 9, 8], "uv": [78, 85]}, + {"origin": [-4, 27.15884, -45.59044], "size": [8, 7, 8], "inflate": -0.01, "pivot": [0.5, 29.53384, -39.46544], "rotation": [-12.5, 0, 0], "uv": [86, 18]}, + {"origin": [-3.5, 28.3588, -38.59044], "size": [7, 6, 6], "pivot": [-0.5, 28.53384, -33.46544], "rotation": [-5, 0, 0], "uv": [110, 80]}, + {"origin": [-3.5, 33.823, -42.47727], "size": [7, 1, 5], "inflate": -0.01, "pivot": [-0.5, 30.53384, -37.46544], "rotation": [7.5, 0, 0], "uv": [118, 24]} ] }, { "name": "LowerJaw", "parent": "Head", - "pivot": [0, 21.44133, -39.28949], + "pivot": [0, 24.44133, -38.28949], + "rotation": [2.5, 0, 0], "cubes": [ - {"origin": [-2.5, 20.13384, -43.21544], "size": [5, 2, 4], "pivot": [0, 22.13384, -37.21544], "rotation": [-5, 0, 0], "uv": [118, 80]}, - {"origin": [-2.5, 22.13384, -43.21544], "size": [5, 1, 2], "pivot": [0, 22.13384, -37.21544], "rotation": [-5, 0, 0], "uv": [128, 114]}, - {"origin": [-2, 20.13384, -45.21544], "size": [4, 2, 2], "pivot": [-0.5, 22.13384, -37.21544], "rotation": [-5, 0, 0], "uv": [60, 130]}, - {"origin": [-2, 22.13384, -45.21544], "size": [4, 1, 2], "pivot": [-0.5, 22.13384, -37.21544], "rotation": [-5, 0, 0], "uv": [12, 124]} + {"origin": [-2.5, 21.13384, -45.21544], "size": [5, 3, 7], "pivot": [0, 25.13384, -36.21544], "rotation": [-5, 0, 0], "uv": [118, 14]} ] }, { "name": "Eyes", "parent": "Head", - "pivot": [0, 26.38384, -38.46544], + "pivot": [0, 26.38384, -36.46544], "cubes": [ - {"origin": [4.025, 24.13976, -39.14455], "size": [0, 2, 2], "uv": [80, 95]}, - {"origin": [-4.025, 24.13976, -39.14455], "size": [0, 2, 2], "uv": [80, 99]} + {"origin": [4.025, 26.13976, -38.14455], "size": [0, 2, 2], "uv": [80, 26]}, + {"origin": [-4.025, 26.13976, -38.14455], "size": [0, 2, 2], "uv": [80, 30]} ] }, { @@ -136,66 +134,66 @@ "parent": "Chest", "pivot": [-0.5, 31.02234, -20.41403], "cubes": [ - {"origin": [-3, 18.30092, -24.7988], "size": [6, 3, 5], "inflate": 0.01, "pivot": [-0.5, 19.24061, -18.14082], "rotation": [-15, 0, 0], "uv": [118, 72]}, - {"origin": [-3, 20.32895, -30.70915], "size": [6, 3, 7], "pivot": [0.5, 20.81998, -28.20915], "rotation": [-2.5, 0, 0], "uv": [68, 109]} + {"origin": [-3, 17.30092, -24.7988], "size": [6, 6, 5], "inflate": 0.01, "pivot": [-0.5, 19.24061, -18.14082], "rotation": [-15, 0, 0], "uv": [124, 102]}, + {"origin": [-3, 20.32895, -30.70915], "size": [6, 5, 7], "pivot": [0.5, 21.81998, -28.20915], "rotation": [-17.5, 0, 0], "uv": [108, 54]} ] }, { "name": "LeftShoulder", "parent": "Chest", - "pivot": [4.16003, 14.98545, -17.82552], + "pivot": [4.16003, 13.98545, -18.82552], "rotation": [22.5, 10, -2.5], "cubes": [ - {"origin": [3.16003, 11.98545, -18.82552], "size": [3, 6, 3], "uv": [120, 41]} + {"origin": [3.16003, 10.98545, -19.82552], "size": [3, 6, 3], "uv": [112, 129]} ] }, { "name": "LeftArm", "parent": "LeftShoulder", - "pivot": [5.03503, 11.98545, -17.20052], + "pivot": [5.03503, 10.98545, -18.20052], "rotation": [-45, 5, 0], "cubes": [ - {"origin": [3.03503, 9.98545, -19.20052], "size": [3, 3, 3], "uv": [26, 127]} + {"origin": [3.03503, 7.98545, -20.20052], "size": [3, 4, 3], "uv": [0, 130]} ] }, { "name": "LeftHand", "parent": "LeftArm", - "pivot": [3.94108, 9.40164, -18.12775], + "pivot": [3.94108, 7.40164, -19.12775], "rotation": [22.5, -22.5, 5], "cubes": [ - {"origin": [2.94108, 7.40164, -18.62775], "size": [3, 3, 2], "uv": [94, 130]}, - {"origin": [4.69108, 4.27664, -18.37775], "size": [1, 3, 1], "pivot": [4.69108, 7.15164, -18.62775], "rotation": [45, 0, -22.5], "uv": [80, 103]}, - {"origin": [2.94108, 4.40164, -18.62775], "size": [1, 3, 1], "pivot": [3.94108, 7.40164, -18.62775], "rotation": [22.5, 0, 2.5], "uv": [112, 41]} + {"origin": [2.94108, 5.40164, -19.62775], "size": [3, 3, 2], "uv": [132, 66]}, + {"origin": [4.69108, 2.27664, -19.37775], "size": [1, 3, 1], "pivot": [4.69108, 5.15164, -19.62775], "rotation": [45, 0, -22.5], "uv": [24, 106]}, + {"origin": [2.94108, 2.40164, -19.62775], "size": [1, 3, 1], "pivot": [3.94108, 5.40164, -19.62775], "rotation": [22.5, 0, 2.5], "uv": [44, 112]} ] }, { "name": "RightShoulder", "parent": "Chest", - "pivot": [-4.16003, 14.98545, -17.82552], + "pivot": [-4.16003, 13.98545, -18.82552], "rotation": [22.5, -10, 2.5], "cubes": [ - {"origin": [-6.16003, 11.98545, -18.82552], "size": [3, 6, 3], "uv": [0, 124]} + {"origin": [-6.16003, 10.98545, -19.82552], "size": [3, 6, 3], "uv": [124, 129]} ] }, { "name": "RightArm", "parent": "RightShoulder", - "pivot": [-5.03503, 11.98545, -17.20052], + "pivot": [-5.03503, 10.98545, -18.20052], "rotation": [-45, -5, 0], "cubes": [ - {"origin": [-6.03503, 9.98545, -19.20052], "size": [3, 3, 3], "uv": [128, 102]} + {"origin": [-6.03503, 7.98545, -20.20052], "size": [3, 4, 3], "uv": [12, 130]} ] }, { "name": "RightHand", "parent": "RightArm", - "pivot": [-3.94108, 9.40164, -18.12775], + "pivot": [-3.94108, 7.40164, -19.12775], "rotation": [22.5, 22.5, -5], "cubes": [ - {"origin": [-5.94108, 7.40164, -18.62775], "size": [3, 3, 2], "uv": [94, 130]}, - {"origin": [-5.69108, 4.27664, -18.37775], "size": [1, 3, 1], "pivot": [-4.69108, 7.15164, -18.62775], "rotation": [45, 0, 22.5], "uv": [116, 41]}, - {"origin": [-3.94108, 4.40164, -18.62775], "size": [1, 3, 1], "pivot": [-3.94108, 7.40164, -18.62775], "rotation": [22.5, 0, -2.5], "uv": [60, 126]} + {"origin": [-5.94108, 5.40164, -19.62775], "size": [3, 3, 2], "uv": [132, 71]}, + {"origin": [-5.69108, 2.27664, -19.37775], "size": [1, 3, 1], "pivot": [-4.69108, 5.15164, -19.62775], "rotation": [45, 0, 22.5], "uv": [124, 50]}, + {"origin": [-3.94108, 2.40164, -19.62775], "size": [1, 3, 1], "pivot": [-3.94108, 5.40164, -19.62775], "rotation": [22.5, 0, -2.5], "uv": [68, 124]} ] }, { @@ -204,61 +202,61 @@ "pivot": [0, 29.25292, 10.60928], "rotation": [2.5, 0, 0], "cubes": [ - {"origin": [-4.5, 17.61319, 9.75959], "size": [9, 14, 10], "uv": [54, 0]} + {"origin": [-4.5, 17.61319, 9.75959], "size": [9, 16, 7], "uv": [0, 67]} ] }, { "name": "Tail2", "parent": "Tail1", - "pivot": [0, 28.59074, 19.41696], + "pivot": [0, 28.59074, 15.41696], "rotation": [2.5, 0, 0], "cubes": [ - {"origin": [-4, 19.85072, 18.64575], "size": [8, 11, 9], "uv": [46, 58]} + {"origin": [-4, 19.85072, 14.64575], "size": [8, 13, 7], "uv": [78, 65]} ] }, { "name": "Tail3", "parent": "Tail2", - "pivot": [0, 29.09169, 27.43875], + "pivot": [0, 29.09169, 20.43875], "rotation": [-2.5, 0, 0], "cubes": [ - {"origin": [-3.5, 21.48795, 26.79237], "size": [7, 9, 8], "uv": [56, 78]} + {"origin": [-3.5, 21.48795, 19.79237], "size": [7, 10, 5], "uv": [100, 102]} ] }, { "name": "Tail4", "parent": "Tail3", - "pivot": [0, 28.71971, 34.57783], + "pivot": [0, 28.71971, 24.57783], "rotation": [-2.5, 0, 0], "cubes": [ - {"origin": [-2.5, 22.2962, 33.25231], "size": [5, 8, 9], "uv": [80, 58]} + {"origin": [-2.5, 22.2962, 23.25231], "size": [5, 8, 6], "uv": [116, 0]} ] }, { "name": "Tail5", "parent": "Tail4", - "pivot": [0, 28.43965, 42.08675], + "pivot": [0, 28.43965, 28.08675], "rotation": [-5, 0, 0], "cubes": [ - {"origin": [-2, 23.81261, 40.38427], "size": [4, 6, 8], "uv": [108, 58]} + {"origin": [-2, 23.81261, 26.38427], "size": [4, 6, 8], "uv": [108, 66]} ] }, { "name": "Tail6", "parent": "Tail5", - "pivot": [0, 27.68825, 48.06279], + "pivot": [0, 27.68825, 34.06279], "rotation": [-5, 0, 0], "cubes": [ - {"origin": [-1.5, 24.56094, 47.25402], "size": [3, 5, 6], "uv": [86, 119]} + {"origin": [-1.5, 24.56094, 33.25402], "size": [3, 5, 6], "uv": [90, 54]} ] }, { "name": "Tail7", "parent": "Tail6", - "pivot": [0, 28.09811, 52.87338], + "pivot": [0, 28.09811, 38.87338], "rotation": [-5, 0, 0], "cubes": [ - {"origin": [-1, 25.44751, 52.87982], "size": [2, 4, 7], "uv": [68, 119]} + {"origin": [-1, 25.44751, 38.87982], "size": [2, 4, 7], "uv": [44, 128]} ] }, { @@ -267,7 +265,7 @@ "pivot": [5.5, 22.5, 6.5], "rotation": [-22.5, 0, 0], "cubes": [ - {"origin": [3, 12.5, 1.875], "size": [5, 14, 9], "uv": [0, 60]} + {"origin": [3, 12.5, -0.125], "size": [5, 15, 11], "uv": [54, 0]} ] }, { @@ -276,7 +274,7 @@ "pivot": [5.5, 13.05421, 5.16462], "rotation": [52.5, 0, 0], "cubes": [ - {"origin": [3.5, 4.53746, 2.96158], "size": [4, 11, 6], "uv": [108, 102]} + {"origin": [3.5, 4.53746, 2.96158], "size": [4, 11, 6], "uv": [24, 112]} ] }, { @@ -285,7 +283,7 @@ "pivot": [5.5, 5.16246, 6.62905], "rotation": [-47.5, 0, 0], "cubes": [ - {"origin": [4, -2.3113, 4.29805], "size": [3, 9, 4], "uv": [104, 119]} + {"origin": [4, -2.3113, 4.29805], "size": [3, 9, 4], "uv": [32, 67]} ] }, { @@ -294,19 +292,7 @@ "pivot": [5.5, -1.71523, 6.61011], "rotation": [17.5, 0, 0], "cubes": [ - {"origin": [4.5, -3.34023, 1.11011], "size": [2, 2, 3], "uv": [147, 89]}, - {"origin": [6.5, -3.34023, 1.11011], "size": [2, 2, 5], "inflate": -0.01, "pivot": [6.5, -1.34023, 4.11011], "rotation": [0, -22.5, 0], "uv": [200, 171]}, - {"origin": [5, -1.32284, 0.39259], "size": [1, 1, 1], "pivot": [5.5, -1.34023, 4.11011], "rotation": [22.5, 0, 0], "uv": [138, 221]}, - {"origin": [5, 0.02235, 0.06491], "size": [1, 1, 1], "pivot": [5.5, -1.34023, 4.11011], "rotation": [45, 0, 0], "uv": [162, 229]}, - {"origin": [5, -4.15919, 1.13882], "size": [1, 1, 1], "pivot": [5.5, -1.34023, 4.11011], "rotation": [-22.5, 0, 0], "uv": [166, 229]}, - {"origin": [7, -4.15919, 1.13882], "size": [1, 1, 1], "pivot": [6.5, -1.34023, 4.11011], "rotation": [-22.5, -22.5, 0], "uv": [194, 229]}, - {"origin": [7, 0.02235, 0.06491], "size": [1, 1, 1], "pivot": [6.5, -1.34023, 4.11011], "rotation": [45, -22.5, 0], "uv": [226, 194]}, - {"origin": [7, -1.32284, 0.39259], "size": [1, 1, 1], "pivot": [6.5, -1.34023, 4.11011], "rotation": [22.5, -22.5, 0], "uv": [208, 239]}, - {"origin": [3, -1.32284, 0.39259], "size": [1, 1, 1], "pivot": [4.5, -1.34023, 4.11011], "rotation": [22.5, 22.5, 0], "uv": [212, 239]}, - {"origin": [3, 0.02235, 0.06491], "size": [1, 1, 1], "pivot": [4.5, -1.34023, 4.11011], "rotation": [45, 22.5, 0], "uv": [216, 239]}, - {"origin": [3, -4.15919, 1.13882], "size": [1, 1, 1], "pivot": [4.5, -1.34023, 4.11011], "rotation": [-22.5, 22.5, 0], "uv": [232, 208]}, - {"origin": [2.5, -3.34023, 1.11011], "size": [2, 2, 5], "inflate": -0.01, "pivot": [4.5, -1.34023, 4.11011], "rotation": [0, 22.5, 0], "uv": [234, 172]}, - {"origin": [3, -3.34023, 1.11011], "size": [5, 2, 7], "uv": [134, 0]} + {"origin": [3, -3.34023, 1.11011], "size": [5, 3, 7], "uv": [44, 118]} ] }, { @@ -315,7 +301,7 @@ "pivot": [-5.5, 22.5, 6.5], "rotation": [-22.5, 0, 0], "cubes": [ - {"origin": [-8, 12.5, 1.875], "size": [5, 14, 9], "uv": [28, 78]} + {"origin": [-8, 12.5, -0.125], "size": [5, 15, 11], "uv": [46, 65]} ] }, { @@ -324,7 +310,7 @@ "pivot": [-5.5, 13.05421, 5.16462], "rotation": [52.5, 0, 0], "cubes": [ - {"origin": [-7.5, 4.53746, 2.96158], "size": [4, 11, 6], "uv": [48, 109]} + {"origin": [-7.5, 4.53746, 2.96158], "size": [4, 11, 6], "uv": [112, 33]} ] }, { @@ -333,7 +319,7 @@ "pivot": [-5.5, 5.16246, 6.62905], "rotation": [-47.5, 0, 0], "cubes": [ - {"origin": [-7, -2.3113, 4.29805], "size": [3, 9, 4], "uv": [118, 119]} + {"origin": [-7, -2.3113, 4.29805], "size": [3, 9, 4], "uv": [62, 128]} ] }, { @@ -342,19 +328,7 @@ "pivot": [-5.5, -1.71523, 6.61011], "rotation": [17.5, 0, 0], "cubes": [ - {"origin": [-8, -3.34023, 1.11011], "size": [5, 2, 7], "uv": [134, 0]}, - {"origin": [-6.5, -3.34023, 1.11011], "size": [2, 2, 3], "uv": [246, 165]}, - {"origin": [-6, -1.32284, 0.39259], "size": [1, 1, 1], "pivot": [-5.5, -1.34023, 4.11011], "rotation": [22.5, 0, 0], "uv": [234, 142]}, - {"origin": [-6, -4.15919, 1.13882], "size": [1, 1, 1], "pivot": [-5.5, -1.34023, 4.11011], "rotation": [-22.5, 0, 0], "uv": [137, 137]}, - {"origin": [-6, 0.02235, 0.06491], "size": [1, 1, 1], "pivot": [-5.5, -1.34023, 4.11011], "rotation": [45, 0, 0], "uv": [238, 142]}, - {"origin": [-8, -1.32284, 0.39259], "size": [1, 1, 1], "pivot": [-6.5, -1.34023, 4.11011], "rotation": [22.5, 22.5, 0], "uv": [178, 248]}, - {"origin": [-8, 0.02235, 0.06491], "size": [1, 1, 1], "pivot": [-6.5, -1.34023, 4.11011], "rotation": [45, 22.5, 0], "uv": [240, 208]}, - {"origin": [-8, -4.15919, 1.13882], "size": [1, 1, 1], "pivot": [-6.5, -1.34023, 4.11011], "rotation": [-22.5, 22.5, 0], "uv": [79, 179]}, - {"origin": [-8.5, -3.34023, 1.11011], "size": [2, 2, 5], "inflate": -0.01, "pivot": [-6.5, -1.34023, 4.11011], "rotation": [0, 22.5, 0], "uv": [144, 170]}, - {"origin": [-4.5, -3.34023, 1.11011], "size": [2, 2, 5], "inflate": -0.01, "pivot": [-4.5, -1.34023, 4.11011], "rotation": [0, -22.5, 0], "uv": [126, 249]}, - {"origin": [-4, -4.15919, 1.13882], "size": [1, 1, 1], "pivot": [-4.5, -1.34023, 4.11011], "rotation": [-22.5, -22.5, 0], "uv": [242, 239]}, - {"origin": [-4, 0.02235, 0.06491], "size": [1, 1, 1], "pivot": [-4.5, -1.34023, 4.11011], "rotation": [45, -22.5, 0], "uv": [217, 136]}, - {"origin": [-4, -1.32284, 0.39259], "size": [1, 1, 1], "pivot": [-4.5, -1.34023, 4.11011], "rotation": [22.5, -22.5, 0], "uv": [246, 191]} + {"origin": [-8, -3.34023, 1.11011], "size": [5, 3, 7], "uv": [0, 120]} ] }, { @@ -363,7 +337,7 @@ "pivot": [6.67938, 29.53859, -16.125], "rotation": [22.5, 0, -27.5], "cubes": [ - {"origin": [3.48563, 15.86923, -18.54905], "size": [5, 15, 6], "uv": [86, 88]} + {"origin": [3.48563, 15.86923, -18.54905], "size": [5, 15, 6], "uv": [90, 33]} ] }, { @@ -372,7 +346,7 @@ "pivot": [5.89019, 16.9348, -16.47367], "rotation": [-47.93659, 6.73717, 20.09298], "cubes": [ - {"origin": [3.62068, 5.85721, -18.71966], "size": [4, 13, 5], "inflate": -0.01, "uv": [28, 60]} + {"origin": [3.62068, 5.85721, -18.71966], "size": [4, 13, 5], "inflate": -0.01, "uv": [76, 117]} ] }, { @@ -381,7 +355,7 @@ "pivot": [5.33713, 6.04299, -17.51601], "rotation": [24.81197, -3.1622, 6.80423], "cubes": [ - {"origin": [3.43335, 1.48172, -18.50449], "size": [4, 5, 3], "uv": [94, 109]} + {"origin": [3.43335, 1.48172, -18.50449], "size": [4, 5, 3], "uv": [32, 80]} ] }, { @@ -389,7 +363,7 @@ "parent": "hand", "pivot": [7.04883, 1.44767, -17.50955], "cubes": [ - {"origin": [5.55835, -2.26828, -18.37949], "size": [2, 4, 2], "uv": [48, 101]} + {"origin": [5.55835, -2.26828, -18.37949], "size": [2, 4, 2], "uv": [68, 118]} ] }, { @@ -397,10 +371,10 @@ "parent": "finger", "pivot": [6.61027, -2.20141, -17.87358], "cubes": [ - {"origin": [5.55835, -3.26828, -18.37949], "size": [2, 2, 4], "inflate": -0.01, "uv": [128, 108]}, - {"origin": [6.07956, -2.48856, -9.85285], "size": [1, 1, 1], "pivot": [8.73485, -1.68244, -11.97783], "rotation": [-157.5, 0, 0], "uv": [132, 96]}, - {"origin": [6.07956, -3.31651, -10.94041], "size": [1, 1, 1], "pivot": [8.73485, -1.68244, -11.97783], "rotation": [-135, 0, 0], "uv": [132, 98]}, - {"origin": [6.07956, -0.95244, -10.23554], "size": [1, 1, 1], "pivot": [8.73485, -1.68244, -11.97783], "rotation": [157.5, 0, 0], "uv": [132, 100]} + {"origin": [5.55835, -3.26828, -18.37949], "size": [2, 2, 4], "inflate": -0.01, "uv": [132, 30]}, + {"origin": [6.07956, -2.48856, -9.85285], "size": [1, 1, 1], "pivot": [8.73485, -1.68244, -11.97783], "rotation": [-157.5, 0, 0], "uv": [84, 33]}, + {"origin": [6.07956, -3.31651, -10.94041], "size": [1, 1, 1], "pivot": [8.73485, -1.68244, -11.97783], "rotation": [-135, 0, 0], "uv": [40, 88]}, + {"origin": [6.07956, -0.95244, -10.23554], "size": [1, 1, 1], "pivot": [8.73485, -1.68244, -11.97783], "rotation": [157.5, 0, 0], "uv": [24, 110]} ] }, { @@ -408,7 +382,7 @@ "parent": "hand", "pivot": [4.80125, 1.32277, -17.50519], "cubes": [ - {"origin": [3.30835, -2.26828, -18.37949], "size": [2, 4, 2], "uv": [132, 63]} + {"origin": [3.30835, -2.26828, -18.37949], "size": [2, 4, 2], "uv": [134, 54]} ] }, { @@ -416,10 +390,10 @@ "parent": "finger3", "pivot": [4.35362, -2.21461, -18.24828], "cubes": [ - {"origin": [3.30835, -3.26828, -18.37949], "size": [2, 2, 4], "inflate": -0.01, "uv": [130, 20]}, - {"origin": [3.82956, -2.48856, -9.85285], "size": [1, 1, 1], "pivot": [6.48485, -1.68244, -11.97783], "rotation": [-157.5, 0, 0], "uv": [104, 132]}, - {"origin": [3.82956, -3.31651, -10.94041], "size": [1, 1, 1], "pivot": [6.48485, -1.68244, -11.97783], "rotation": [-135, 0, 0], "uv": [108, 132]}, - {"origin": [3.82956, -0.95244, -10.23554], "size": [1, 1, 1], "pivot": [6.48485, -1.68244, -11.97783], "rotation": [157.5, 0, 0], "uv": [112, 132]} + {"origin": [3.30835, -3.26828, -18.37949], "size": [2, 2, 4], "inflate": -0.01, "uv": [132, 36]}, + {"origin": [3.82956, -2.48856, -9.85285], "size": [1, 1, 1], "pivot": [6.48485, -1.68244, -11.97783], "rotation": [-157.5, 0, 0], "uv": [44, 116]}, + {"origin": [3.82956, -3.31651, -10.94041], "size": [1, 1, 1], "pivot": [6.48485, -1.68244, -11.97783], "rotation": [-135, 0, 0], "uv": [118, 30]}, + {"origin": [3.82956, -0.95244, -10.23554], "size": [1, 1, 1], "pivot": [6.48485, -1.68244, -11.97783], "rotation": [157.5, 0, 0], "uv": [122, 30]} ] }, { @@ -428,8 +402,8 @@ "pivot": [3.66137, 5.24252, -16.68021], "rotation": [0, 0, 27.5], "cubes": [ - {"origin": [3.15094, 2.58161, -18.12949], "size": [2, 3, 2], "uv": [132, 86]}, - {"origin": [2.90094, 1.08161, -17.62949], "size": [1, 2, 1], "pivot": [3.65094, 3.95661, -16.62949], "rotation": [0, 0, -27.5], "uv": [80, 75]} + {"origin": [3.15094, 2.58161, -18.12949], "size": [2, 3, 2], "uv": [134, 119]}, + {"origin": [2.90094, 1.08161, -17.62949], "size": [1, 2, 1], "pivot": [3.65094, 3.95661, -16.62949], "rotation": [0, 0, -27.5], "uv": [32, 88]} ] }, { @@ -438,7 +412,7 @@ "pivot": [-6.67938, 29.53859, -16.125], "rotation": [22.5, 0, 27.5], "cubes": [ - {"origin": [-8.48563, 15.86923, -18.54905], "size": [5, 15, 6], "uv": [90, 24]} + {"origin": [-8.48563, 15.86923, -18.54905], "size": [5, 15, 6], "uv": [28, 91]} ] }, { @@ -447,7 +421,7 @@ "pivot": [-5.89019, 16.9348, -16.47367], "rotation": [-47.93659, -6.73717, -20.09298], "cubes": [ - {"origin": [-7.62068, 5.85721, -18.71966], "size": [4, 13, 5], "inflate": -0.01, "uv": [112, 23]} + {"origin": [-7.62068, 5.85721, -18.71966], "size": [4, 13, 5], "inflate": -0.01, "uv": [94, 117]} ] }, { @@ -456,7 +430,7 @@ "pivot": [-5.33713, 6.04299, -17.51601], "rotation": [24.81197, 3.1622, -6.80423], "cubes": [ - {"origin": [-7.43335, 1.48172, -18.50449], "size": [4, 5, 3], "uv": [120, 12]} + {"origin": [-7.43335, 1.48172, -18.50449], "size": [4, 5, 3], "uv": [24, 129]} ] }, { @@ -464,7 +438,7 @@ "parent": "hand2", "pivot": [-7.04883, 1.44767, -17.50955], "cubes": [ - {"origin": [-7.55835, -2.26828, -18.37949], "size": [2, 4, 2], "uv": [132, 57]} + {"origin": [-7.55835, -2.26828, -18.37949], "size": [2, 4, 2], "uv": [134, 60]} ] }, { @@ -472,10 +446,10 @@ "parent": "finger5", "pivot": [-6.61027, -2.20141, -17.87358], "cubes": [ - {"origin": [-7.55835, -3.26828, -18.37949], "size": [2, 2, 4], "inflate": -0.01, "uv": [130, 26]}, - {"origin": [-7.07956, -2.48856, -9.85285], "size": [1, 1, 1], "pivot": [-8.73485, -1.68244, -11.97783], "rotation": [-157.5, 0, 0], "uv": [116, 132]}, - {"origin": [-7.07956, -3.31651, -10.94041], "size": [1, 1, 1], "pivot": [-8.73485, -1.68244, -11.97783], "rotation": [-135, 0, 0], "uv": [132, 117]}, - {"origin": [-7.07956, -0.95244, -10.23554], "size": [1, 1, 1], "pivot": [-8.73485, -1.68244, -11.97783], "rotation": [157.5, 0, 0], "uv": [132, 119]} + {"origin": [-7.55835, -3.26828, -18.37949], "size": [2, 2, 4], "inflate": -0.01, "uv": [132, 42]}, + {"origin": [-7.07956, -2.48856, -9.85285], "size": [1, 1, 1], "pivot": [-8.73485, -1.68244, -11.97783], "rotation": [-157.5, 0, 0], "uv": [72, 124]}, + {"origin": [-7.07956, -3.31651, -10.94041], "size": [1, 1, 1], "pivot": [-8.73485, -1.68244, -11.97783], "rotation": [-135, 0, 0], "uv": [124, 113]}, + {"origin": [-7.07956, -0.95244, -10.23554], "size": [1, 1, 1], "pivot": [-8.73485, -1.68244, -11.97783], "rotation": [157.5, 0, 0], "uv": [124, 115]} ] }, { @@ -483,7 +457,7 @@ "parent": "hand2", "pivot": [-4.80125, 1.32277, -17.50519], "cubes": [ - {"origin": [-5.30835, -2.26828, -18.37949], "size": [2, 4, 2], "uv": [132, 63]} + {"origin": [-5.30835, -2.26828, -18.37949], "size": [2, 4, 2], "uv": [134, 113]} ] }, { @@ -491,10 +465,10 @@ "parent": "finger7", "pivot": [-4.35362, -2.21461, -18.24828], "cubes": [ - {"origin": [-5.30835, -3.26828, -18.37949], "size": [2, 2, 4], "inflate": -0.01, "uv": [130, 32]}, - {"origin": [-4.82956, -2.48856, -9.85285], "size": [1, 1, 1], "pivot": [-6.48485, -1.68244, -11.97783], "rotation": [-157.5, 0, 0], "uv": [120, 132]}, - {"origin": [-4.82956, -3.31651, -10.94041], "size": [1, 1, 1], "pivot": [-6.48485, -1.68244, -11.97783], "rotation": [-135, 0, 0], "uv": [132, 121]}, - {"origin": [-4.82956, -0.95244, -10.23554], "size": [1, 1, 1], "pivot": [-6.48485, -1.68244, -11.97783], "rotation": [157.5, 0, 0], "uv": [132, 123]} + {"origin": [-5.30835, -3.26828, -18.37949], "size": [2, 2, 4], "inflate": -0.01, "uv": [132, 48]}, + {"origin": [-4.82956, -2.48856, -9.85285], "size": [1, 1, 1], "pivot": [-6.48485, -1.68244, -11.97783], "rotation": [-157.5, 0, 0], "uv": [126, 30]}, + {"origin": [-4.82956, -3.31651, -10.94041], "size": [1, 1, 1], "pivot": [-6.48485, -1.68244, -11.97783], "rotation": [-135, 0, 0], "uv": [72, 126]}, + {"origin": [-4.82956, -0.95244, -10.23554], "size": [1, 1, 1], "pivot": [-6.48485, -1.68244, -11.97783], "rotation": [157.5, 0, 0], "uv": [128, 50]} ] }, { @@ -503,8 +477,8 @@ "pivot": [-3.66137, 5.24252, -16.68021], "rotation": [0, 0, -27.5], "cubes": [ - {"origin": [-5.15094, 2.58161, -18.12949], "size": [2, 3, 2], "uv": [132, 91]}, - {"origin": [-3.90094, 1.08161, -17.62949], "size": [1, 2, 1], "pivot": [-3.65094, 3.95661, -16.62949], "rotation": [0, 0, 27.5], "uv": [108, 72]} + {"origin": [-5.15094, 2.58161, -18.12949], "size": [2, 3, 2], "uv": [134, 124]}, + {"origin": [-3.90094, 1.08161, -17.62949], "size": [1, 2, 1], "pivot": [-3.65094, 3.95661, -16.62949], "rotation": [0, 0, 27.5], "uv": [36, 88]} ] } ] diff --git a/common/src/main/resources/assets/jurassicrevived/geo/giganotosaurus.geo.json b/common/src/main/resources/assets/jurassicrevived/geo/giganotosaurus.geo.json index 9fea6c3..02d1851 100755 --- a/common/src/main/resources/assets/jurassicrevived/geo/giganotosaurus.geo.json +++ b/common/src/main/resources/assets/jurassicrevived/geo/giganotosaurus.geo.json @@ -11,444 +11,427 @@ "visible_bounds_offset": [0, 1.75, 0] }, "bones": [ - { - "name": "root", - "pivot": [0, 24, 0] - }, { "name": "RightThigh", - "parent": "root", - "pivot": [5, 28.7, 5], + "pivot": [-5, 28.7, 5], "rotation": [80.81, 0, 0], "cubes": [ - {"origin": [5, 22.7, -8], "size": [5, 10, 16], "uv": [0, 138]} + {"origin": [-10, 22.7, -8], "size": [5, 10, 16], "uv": [0, 138]} ] }, { "name": "RightCalf1", "parent": "RightThigh", - "pivot": [7.5, 32.5, -7.5], + "pivot": [-7.5, 32.5, -7.5], "rotation": [-38.74, 0, 0], "cubes": [ - {"origin": [5.5, 18.5, -7.5], "size": [4, 14, 6], "uv": [0, 166]} + {"origin": [-9.5, 18.5, -7.5], "size": [4, 14, 6], "uv": [0, 166]} ] }, { "name": "RightCalf2", "parent": "RightCalf1", - "pivot": [7.5, 20.8, -4], + "pivot": [-7.5, 20.8, -4], "rotation": [-72.15, 0, 0], "cubes": [ - {"origin": [6, 9.8, -5], "size": [3, 11, 3], "uv": [0, 190]} + {"origin": [-9, 9.8, -5], "size": [3, 11, 3], "uv": [0, 190]} ] }, { "name": "FootRight", "parent": "RightCalf2", - "pivot": [7.5, 10.63467, -2.49879], + "pivot": [-7.5, 10.63467, -2.49879], "rotation": [30.57, 0, 0], "cubes": [ - {"origin": [5, 9.63464, -9.49024], "size": [5, 2, 9], "uv": [0, 209]}, - {"origin": [6.5, 9.63581, -9.46665], "size": [2, 2, 3], "uv": [243, 251], "mirror": true}, - {"origin": [7, 14.27706, -3.44194], "size": [1, 1, 1], "pivot": [5.5, -4, 3.5], "rotation": [22.5, 0, 0], "uv": [26, 84], "mirror": true}, - {"origin": [7, 15.46625, 3.4635], "size": [1, 1, 1], "pivot": [5.5, -4, 3.5], "rotation": [45, 0, 0], "uv": [26, 84], "mirror": true}, - {"origin": [8.66183, 13.69384, -2.03391], "size": [1, 1, 1], "pivot": [4.5, -4, 3.5], "rotation": [22.5, 22.5, 0], "uv": [26, 84], "mirror": true}, - {"origin": [8.16183, 9.63581, -7.94261], "size": [2, 2, 5], "inflate": -0.01, "pivot": [4.5, -4, 3.5], "rotation": [0, 22.5, 0], "uv": [241, 249], "mirror": true}, - {"origin": [8.66183, 14.38859, 4.54116], "size": [1, 1, 1], "pivot": [4.5, -4, 3.5], "rotation": [45, 22.5, 0], "uv": [26, 84], "mirror": true}, - {"origin": [8.66183, 4.39579, -13.25481], "size": [1, 1, 1], "pivot": [4.5, -4, 3.5], "rotation": [-22.5, 22.5, 0], "uv": [26, 84], "mirror": true}, - {"origin": [7, 3.81257, -14.66284], "size": [1, 1, 1], "pivot": [5.5, -4, 3.5], "rotation": [-22.5, 0, 0], "uv": [26, 84], "mirror": true}, - {"origin": [4.53369, 9.63581, -9.47335], "size": [2, 2, 5], "inflate": -0.01, "pivot": [6.5, -4, 3.5], "rotation": [0, -22.5, 0], "uv": [241, 249], "mirror": true}, - {"origin": [5.03369, 14.27963, -3.44813], "size": [1, 1, 1], "pivot": [6.5, -4, 3.5], "rotation": [22.5, -22.5, 0], "uv": [26, 84], "mirror": true}, - {"origin": [5.03369, 15.47099, 3.45876], "size": [1, 1, 1], "pivot": [6.5, -4, 3.5], "rotation": [45, -22.5, 0], "uv": [26, 84], "mirror": true}, - {"origin": [5.03369, 3.81001, -14.66903], "size": [1, 1, 1], "pivot": [6.5, -4, 3.5], "rotation": [-22.5, -22.5, 0], "uv": [26, 84], "mirror": true} + {"origin": [-10, 9.63464, -9.49024], "size": [5, 2, 9], "uv": [0, 209]} ] }, { "name": "Bodyhips", - "parent": "root", - "pivot": [-0.5, 28.7, 5], + "pivot": [0.5, 28.7, 5], + "rotation": [-3.5, 0, 0], "cubes": [ - {"origin": [-7, 18.8, 0], "size": [13, 18, 11], "uv": [77, 1]} + {"origin": [-6, 18.8, 0], "size": [13, 18, 11], "uv": [77, 1]} ] }, { "name": "Tail1", "parent": "Bodyhips", - "pivot": [-0.5, 36.3, 9.4], + "pivot": [0.5, 36.3, 9.4], "rotation": [2.44, 0, 0], "cubes": [ - {"origin": [-5.5, 23.3, 9.4], "size": [10, 13, 13], "uv": [118, 34]} + {"origin": [-4.5, 23.3, 9.4], "size": [10, 13, 13], "uv": [118, 34]} ] }, { "name": "Tail2", "parent": "Tail1", - "pivot": [-0.5, 35.5, 21.4], + "pivot": [0.5, 35.5, 21.4], "rotation": [-0.67, 0, 0], "cubes": [ - {"origin": [-5, 24.5, 21.4], "size": [9, 11, 12], "uv": [124, 63]} + {"origin": [-4, 24.5, 21.4], "size": [9, 11, 12], "uv": [124, 63]} ] }, { "name": "Tail3", "parent": "Tail2", - "pivot": [-0.5, 34.8, 32.4], + "pivot": [0.5, 34.8, 32.4], "rotation": [-1.59, 0, 0], "cubes": [ - {"origin": [-4.5, 25.8, 31.4], "size": [8, 9, 11], "uv": [118, 88]} + {"origin": [-3.5, 25.8, 31.4], "size": [8, 9, 11], "uv": [118, 88]} ] }, { "name": "Tail4", "parent": "Tail3", - "pivot": [-0.5, 34.3, 41.7], + "pivot": [0.5, 34.3, 41.7], "rotation": [-1.47, 0, 0], "cubes": [ - {"origin": [-3.5, 26.3, 40.7], "size": [6, 8, 12], "uv": [118, 110]} + {"origin": [-2.5, 26.3, 40.7], "size": [6, 8, 12], "uv": [118, 110]} ] }, { "name": "Tail5", "parent": "Tail4", - "pivot": [-0.5, 33.9, 52.2], + "pivot": [0.5, 33.9, 52.2], "rotation": [-3.84, 0, 0], "cubes": [ - {"origin": [-3, 26.9, 52.2], "size": [5, 7, 12], "uv": [118, 132]} + {"origin": [-2, 26.9, 52.2], "size": [5, 7, 12], "uv": [118, 132]} ] }, { "name": "Tail6", "parent": "Tail5", - "pivot": [-0.5, 33.2, 63.9], + "pivot": [0.5, 33.2, 63.9], "rotation": [-3.17, 0, 0], "cubes": [ - {"origin": [-2.5, 28.2, 63.9], "size": [4, 5, 14], "uv": [119, 153]} + {"origin": [-1.5, 28.2, 63.9], "size": [4, 5, 14], "uv": [119, 153]} ] }, { "name": "Tail6quills", "parent": "Tail6", - "pivot": [-0.5, 33.2, 67.9], + "pivot": [0.5, 33.2, 67.9], "cubes": [ - {"origin": [-0.5, 33.2, 63.9], "size": [0, 4, 14], "uv": [205, 95]} + {"origin": [0.5, 33.2, 63.9], "size": [0, 4, 14], "uv": [205, 95]} ] }, { "name": "Tail5quills", "parent": "Tail5", - "pivot": [-0.5, 33.9, 56.2], + "pivot": [0.5, 33.9, 56.2], "cubes": [ - {"origin": [-0.5, 33.9, 52.2], "size": [0, 4, 12], "uv": [180, 97]} + {"origin": [0.5, 33.9, 52.2], "size": [0, 4, 12], "uv": [180, 97]} ] }, { "name": "Tail4quills", "parent": "Tail4", - "pivot": [-0.5, 34.3, 45.7], + "pivot": [0.5, 34.3, 45.7], "cubes": [ - {"origin": [-0.5, 34.3, 41.7], "size": [0, 4, 11], "uv": [157, 98]} + {"origin": [0.5, 34.3, 41.7], "size": [0, 4, 11], "uv": [157, 98]} ] }, { "name": "Tail3quills", "parent": "Tail3", - "pivot": [-0.5, 34.8, 37.4], + "pivot": [0.5, 34.8, 37.4], "cubes": [ - {"origin": [-0.5, 34.8, 33.4], "size": [0, 4, 9], "uv": [228, 95]} + {"origin": [0.5, 34.8, 33.4], "size": [0, 4, 9], "uv": [228, 95]} ] }, { "name": "Tail2quills", "parent": "Tail2", - "pivot": [-0.5, 35.5, 26.4], + "pivot": [0.5, 35.5, 26.4], "cubes": [ - {"origin": [-0.5, 35.5, 22.4], "size": [0, 4, 11], "uv": [205, 93]} + {"origin": [0.5, 35.5, 22.4], "size": [0, 4, 11], "uv": [205, 93]} ] }, { "name": "Tail1quills", "parent": "Tail1", - "pivot": [-0.5, 36.3, 14.4], + "pivot": [0.5, 36.3, 14.4], "cubes": [ - {"origin": [-0.5, 36.3, 10.4], "size": [0, 4, 12], "uv": [180, 92]} + {"origin": [0.5, 36.3, 10.4], "size": [0, 4, 12], "uv": [180, 92]} ] }, { "name": "Bodywaist", "parent": "Bodyhips", - "pivot": [-0.5, 36.3, 1.5], + "pivot": [0.5, 36.3, 1.5], "rotation": [2.61, 0, 0], "cubes": [ - {"origin": [-6.5, 19.3, -10.5], "size": [12, 17, 12], "uv": [128, 1]} + {"origin": [-5.5, 19.3, -10.5], "size": [12, 17, 12], "uv": [128, 1]} ] }, { "name": "Bodyshoulders", "parent": "Bodywaist", - "pivot": [-0.5, 35.3, -10.5], + "pivot": [0.5, 35.3, -10.5], "rotation": [5.22, 0, 0], "cubes": [ - {"origin": [-5.5, 20.3, -19.5], "size": [10, 15, 9], "uv": [178, 1]} + {"origin": [-4.5, 20.3, -19.5], "size": [10, 15, 9], "uv": [178, 1]} ] }, { "name": "UpperArmLEFT", "parent": "Bodyshoulders", - "pivot": [-5, 23.3, -18.5], - "rotation": [38.53, -12.45, 0], + "pivot": [5, 23.3, -18.5], + "rotation": [38.53, 12.45, 0], "cubes": [ - {"origin": [-8, 18.3, -18.5], "size": [3, 5, 3], "uv": [0, 68]} + {"origin": [5, 18.3, -18.5], "size": [3, 5, 3], "uv": [0, 68]} ] }, { "name": "LowerArmLEFT", "parent": "UpperArmLEFT", - "pivot": [-5.5, 20.1, -17.8], - "rotation": [-46.41, 0, 0], + "pivot": [5.5, 20.1, -17.8], + "rotation": [-70, 0, 0], "cubes": [ - {"origin": [-7.5, 13.9, -17.9], "size": [2, 6, 2], "uv": [15, 59]} + {"origin": [5.5, 13.9, -17.9], "size": [2, 6, 2], "uv": [15, 59]} ] }, { "name": "handleft", "parent": "LowerArmLEFT", - "pivot": [-6.95836, 13.98464, -17.36255], - "rotation": [24.55, 54.78, 0], + "pivot": [7, 14, -17.5], + "rotation": [25, -40, 0], "cubes": [ - {"origin": [-7.95836, 10.98464, -17.36255], "size": [2, 3, 1], "uv": [27, 63]} + {"origin": [6, 11, -17.5], "size": [2, 3, 1], "uv": [27, 63]} ] }, { "name": "clawl2", "parent": "handleft", - "pivot": [-6.95836, 12.98464, -16.36255], + "pivot": [7, 13, -16.5], "rotation": [15.25, 0, 0], "cubes": [ - {"origin": [-7.45836, 8.98464, -17.86255], "size": [1, 3, 1], "uv": [0, 0]} + {"origin": [6.5, 9, -18], "size": [1, 3, 1], "uv": [0, 0]} ] }, { "name": "clawl1", "parent": "handleft", - "pivot": [-6.95836, 12.98464, -16.36255], - "rotation": [15.24, -2.44, -23.07], + "pivot": [7, 13, -16.5], + "rotation": [15.24, 2.44, -23.07], "cubes": [ - {"origin": [-7.45836, 8.98464, -17.56255], "size": [1, 3, 1], "uv": [0, 0]} + {"origin": [6.5, 9, -17.7], "size": [1, 3, 1], "uv": [0, 0]} ] }, { "name": "clawl3", "parent": "handleft", - "pivot": [-6.95836, 12.68464, -16.36255], - "rotation": [15.25, -2.62, 23.48], + "pivot": [7, 12.7, -16.5], + "rotation": [15.25, 2.62, 23.48], "cubes": [ - {"origin": [-7.45836, 8.68464, -17.56255], "size": [1, 3, 1], "uv": [0, 0]} + {"origin": [6.5, 8.7, -17.7], "size": [1, 3, 1], "uv": [0, 0]} ] }, { "name": "UpperArmRight", "parent": "Bodyshoulders", - "pivot": [4, 23.3, -18.5], - "rotation": [38.53, 12.45, 0], + "pivot": [-4, 23.3, -18.5], + "rotation": [38.53, -12.45, 0], "cubes": [ - {"origin": [3, 18.3, -18.5], "size": [3, 5, 3], "uv": [0, 57]} + {"origin": [-6, 18.3, -18.5], "size": [3, 5, 3], "uv": [0, 57]} ] }, { "name": "LowerArmRight", "parent": "UpperArmRight", - "pivot": [3.5, 19.8, -17.8], - "rotation": [-46.41, 0, 0], + "pivot": [-3.5, 19.8, -17.8], + "rotation": [-70, 0, 0], "cubes": [ - {"origin": [3.5, 13.6, -17.9], "size": [2, 6, 2], "uv": [15, 69]} + {"origin": [-5.5, 13.6, -17.9], "size": [2, 6, 2], "uv": [15, 69]} ] }, { "name": "handright", "parent": "LowerArmRight", - "pivot": [4.95836, 13.68464, -17.36255], - "rotation": [24.55, -54.78, 0], + "pivot": [-5, 13.7, -17.5], + "rotation": [25, 40, 0], "cubes": [ - {"origin": [3.95836, 10.68464, -17.36255], "size": [2, 3, 1], "uv": [27, 63]} + {"origin": [-6, 10.7, -17.5], "size": [2, 3, 1], "uv": [27, 63]} ] }, { "name": "clawr2", "parent": "handright", - "pivot": [4.95836, 12.68464, -16.36255], + "pivot": [-5, 12.7, -16.5], "rotation": [15.25, 0, 0], "cubes": [ - {"origin": [4.45836, 8.68464, -17.86255], "size": [1, 3, 1], "uv": [0, 0]} + {"origin": [-5.5, 8.7, -18], "size": [1, 3, 1], "uv": [0, 0]} ] }, { "name": "clawr1", "parent": "handright", - "pivot": [4.95836, 12.68464, -16.36255], - "rotation": [15.25, -2.62, 23.48], + "pivot": [-5, 12.7, -16.5], + "rotation": [15.25, 2.62, 23.48], "cubes": [ - {"origin": [4.45836, 8.68464, -17.56255], "size": [1, 3, 1], "uv": [0, 0]} + {"origin": [-5.5, 8.7, -17.7], "size": [1, 3, 1], "uv": [0, 0]} ] }, { "name": "clawr3", "parent": "handright", - "pivot": [4.95836, 12.38464, -16.36255], - "rotation": [15.24, -2.44, -23.07], + "pivot": [-5, 12.4, -16.5], + "rotation": [15.24, 2.44, -23.07], "cubes": [ - {"origin": [4.45836, 8.38464, -17.56255], "size": [1, 3, 1], "uv": [0, 0]} + {"origin": [-5.5, 8.4, -17.7], "size": [1, 3, 1], "uv": [0, 0]} ] }, { "name": "Neck1", "parent": "Bodyshoulders", - "pivot": [-0.5, 34, -17.2], - "rotation": [-26.55, 0, 0], + "pivot": [0.5, 34, -17.2], + "rotation": [-23, 0, 0], "cubes": [ - {"origin": [-4, 24.5, -26.2], "size": [7, 9, 15], "uv": [203, 14]} + {"origin": [-3, 24.5, -26.2], "size": [7, 9, 15], "uv": [203, 14]} ] }, { "name": "Neck2", "parent": "Neck1", - "pivot": [-0.5, 33.4, -26.2], + "pivot": [0.5, 33.4, -26.2], "rotation": [9.47335, 0, 0], "cubes": [ - {"origin": [-4, 24.4, -31.2], "size": [7, 9, 5], "inflate": -0.005, "uv": [216, 42]} + {"origin": [-3, 24.4, -31.2], "size": [7, 9, 5], "inflate": -0.01, "uv": [216, 42]} ] }, { "name": "Neck3", "parent": "Neck2", - "pivot": [-0.5, 33.4, -31.2], + "pivot": [0.5, 33.4, -31.2], "rotation": [15.10993, 0, 0], "cubes": [ - {"origin": [-4, 24.4, -36.2], "size": [7, 9, 5], "inflate": -0.01, "uv": [218, 59]} + {"origin": [-3, 24.4, -36.2], "size": [7, 9, 5], "uv": [218, 59]} ] }, { "name": "Neck4", "parent": "Neck3", - "pivot": [-0.5, 33.4, -36.2], + "pivot": [0.5, 33.4, -36.2], "rotation": [10.09246, 0, 0], "cubes": [ - {"origin": [-4, 24.4, -41.2], "size": [7, 9, 5], "inflate": -0.015, "uv": [218, 78]} + {"origin": [-3, 24.4, -41.2], "size": [7, 9, 5], "inflate": -0.01, "uv": [218, 78]} ] }, { "name": "Head", "parent": "Neck4", - "pivot": [-0.5, 33.1, -38], + "pivot": [0.5, 33.1, -38], "rotation": [-8.3054, 0, 0], "cubes": [ - {"origin": [-4.5, 23.1, -45], "size": [8, 10, 7], "uv": [0, 92]} + {"origin": [-3.5, 23.1, -45], "size": [8, 10, 7], "uv": [0, 92]} ] }, { "name": "UpperJaw", "parent": "Head", - "pivot": [-1, 30.1, -44.5], + "pivot": [1, 30.1, -44.5], "cubes": [ - {"origin": [-3.5, 25.1, -58.5], "size": [6, 5, 14], "uv": [33, 95]} + {"origin": [-2.5, 25.1, -58.5], "size": [6, 5, 14], "uv": [33, 95]} ] }, { "name": "Snout", "parent": "Head", - "pivot": [-0.5, 33.3, -44.9], + "pivot": [0.5, 33.3, -44.9], "rotation": [9.65, 0, 0], "cubes": [ - {"origin": [-3, 29.1, -54.9], "size": [5, 4, 10], "uv": [23, 77]} + {"origin": [-2, 29.1, -54.9], "size": [5, 4, 10], "uv": [23, 77]} ] }, { "name": "Snout2", "parent": "Snout", - "pivot": [-0.5, 33.1, -54.9], + "pivot": [0.5, 33.1, -54.9], "rotation": [10.73, 0, 0], "cubes": [ - {"origin": [-3, 31.1, -58.9], "size": [5, 2, 4], "uv": [61, 88]} + {"origin": [-2, 31.1, -58.9], "size": [5, 2, 4], "uv": [61, 88]} ] }, { "name": "Lowerjaw", "parent": "Head", - "pivot": [-1, 25.2, -44.3], - "rotation": [-3.301, 0, 0], + "pivot": [1, 25.2, -44.3], + "rotation": [-5.801, 0, 0], "cubes": [ - {"origin": [-3, 23.2, -58.3], "size": [5, 2, 14], "uv": [31, 117]} + {"origin": [-2, 23.2, -58.3], "size": [5, 2, 14], "uv": [31, 117]} ] }, { - "name": "Lefteyeridge", + "name": "Righteyeridge2", "parent": "Head", - "pivot": [3.4, 33.4, -43.9], - "rotation": [4.81762, 6.20936, 13.34642], + "pivot": [-3.2, 33.2, -45.3], + "rotation": [5.32, 3.22, -39.59], "cubes": [ - {"origin": [2.4, 31.4, -48.9], "size": [1, 2, 5], "uv": [15, 36], "mirror": true} + {"origin": [-3.2, 31.2, -50.3], "size": [1, 2, 5], "uv": [15, 28]} ] }, { "name": "Righteyeridge3", - "parent": "Lefteyeridge", - "pivot": [3.4, 33.4, -48.8], - "rotation": [9.55, -4.55, 0], + "parent": "Righteyeridge2", + "pivot": [-3.2, 33.2, -50.2], + "rotation": [9.55, 4.55, 0], "cubes": [ - {"origin": [2.4, 31.4, -53.8], "size": [1, 2, 5], "uv": [28, 36], "mirror": true} + {"origin": [-3.2, 31.2, -55.2], "size": [1, 2, 5], "uv": [28, 28]} ] }, { "name": "Righteyeridge4", "parent": "Righteyeridge3", - "pivot": [3.4, 33.3, -53.6], - "rotation": [10.53, -7.69, -5.4], + "pivot": [-3.2, 33.1, -55], + "rotation": [10.53, 7.68783, -5.4], "cubes": [ - {"origin": [2.4, 31.3, -57.6], "size": [1, 2, 4], "uv": [41, 37], "mirror": true} + {"origin": [-3.2, 31.1, -59], "size": [1, 2, 4], "uv": [41, 29]} ] }, { "name": "Righteyeridge5", - "parent": "Lefteyeridge", - "pivot": [3.4, 28.7, -42.6], + "parent": "Righteyeridge2", + "pivot": [-3.2, 28.5, -44], "rotation": [113.72, 0, 0], "cubes": [ - {"origin": [2.4, 26.7, -42.6], "size": [1, 2, 5], "uv": [2, 36], "mirror": true} + {"origin": [-3.2, 26.5, -44], "size": [1, 2, 5], "uv": [2, 28]} + ] + }, + { + "name": "Righteyeridge6", + "parent": "Head", + "pivot": [4.2, 33.2, -45.3], + "rotation": [5.32, -3.22, 39.59], + "cubes": [ + {"origin": [3.2, 31.2, -50.3], "size": [1, 2, 5], "uv": [15, 36]} + ] + }, + { + "name": "Righteyeridge7", + "parent": "Righteyeridge6", + "pivot": [4.2, 33.2, -50.2], + "rotation": [9.55, -4.55, 0], + "cubes": [ + {"origin": [3.2, 31.2, -55.2], "size": [1, 2, 5], "uv": [28, 36]} + ] + }, + { + "name": "Righteyeridge8", + "parent": "Righteyeridge7", + "pivot": [4.2, 33.1, -55], + "rotation": [10.53, -7.69, 5.4], + "cubes": [ + {"origin": [3.2, 31.1, -59], "size": [1, 2, 4], "uv": [41, 37]} ] }, { "name": "Righteyeridge", - "parent": "Head", - "pivot": [-4.3, 33.4, -43.9], - "rotation": [4.54367, -6.3045, -10.83326], - "cubes": [ - {"origin": [-4.3, 31.4, -48.9], "size": [1, 2, 5], "uv": [15, 36]} - ] - }, - { - "name": "Lefteyeridge3", - "parent": "Righteyeridge", - "pivot": [-4.3, 33.4, -48.8], - "rotation": [9.55, 4.55, 0], - "cubes": [ - {"origin": [-4.3, 31.4, -53.8], "size": [1, 2, 5], "uv": [28, 36]} - ] - }, - { - "name": "Lefteyeridge4", - "parent": "Lefteyeridge3", - "pivot": [-4.3, 33.3, -53.6], - "rotation": [10.53, 7.69, 5.4], - "cubes": [ - {"origin": [-4.3, 31.3, -57.6], "size": [1, 2, 4], "uv": [41, 37]} - ] - }, - { - "name": "Lefteyeridge5", - "parent": "Righteyeridge", - "pivot": [-4.3, 28.7, -42.6], + "parent": "Righteyeridge6", + "pivot": [4.2, 28.5, -44], "rotation": [113.72, 0, 0], "cubes": [ - {"origin": [-4.3, 26.7, -42.6], "size": [1, 2, 5], "uv": [2, 36]} + {"origin": [3.2, 26.5, -44], "size": [1, 2, 5], "uv": [2, 36]} ] }, { @@ -456,129 +439,116 @@ "parent": "Head", "pivot": [0, 25.1, -51.5], "cubes": [ - {"origin": [-3.5, 24.1, -58.5], "size": [6, 1, 14], "uv": [66, 107]} + {"origin": [-2.5, 24.1, -58.5], "size": [6, 1, 14], "uv": [66, 107]} ] }, { "name": "Neck4quills", "parent": "Neck4", - "pivot": [-0.5, 33.4, -37.2], + "pivot": [0.5, 33.4, -37.2], "cubes": [ - {"origin": [-0.5, 33.4, -41.2], "size": [0, 4, 5], "uv": [157, 94]} + {"origin": [0.5, 33.4, -41.2], "size": [0, 4, 5], "uv": [157, 94]} ] }, { "name": "Neck3quills", "parent": "Neck3", - "pivot": [-0.5, 33.4, -31.2], + "pivot": [0.5, 33.4, -31.2], "cubes": [ - {"origin": [-0.5, 33.4, -36.2], "size": [0, 4, 5], "uv": [168, 94]} + {"origin": [0.5, 33.4, -36.2], "size": [0, 4, 5], "uv": [168, 94]} ] }, { "name": "Throat2", "parent": "Neck3", - "pivot": [2, 27.44339, -34.38402], + "pivot": [-2, 27.44339, -34.38402], "rotation": [-8.85328, 0, 0], "cubes": [ - {"origin": [-3, 21.75988, -41.3881], "size": [5, 6, 13], "uv": [174, 64]} + {"origin": [-2, 21.75988, -41.3881], "size": [5, 6, 13], "uv": [174, 64]} ] }, { "name": "Neck2quills", "parent": "Neck2", - "pivot": [-0.5, 33.4, -27.2], + "pivot": [0.5, 33.4, -27.2], "cubes": [ - {"origin": [-0.5, 33.4, -31.2], "size": [0, 4, 5], "uv": [179, 94]} + {"origin": [0.5, 33.4, -31.2], "size": [0, 4, 5], "uv": [179, 94]} ] }, { "name": "Throat1", "parent": "Neck1", - "pivot": [-1.5, 28.7, -13], + "pivot": [1.5, 28.7, -13], "rotation": [4.62, 0, 0], "cubes": [ - {"origin": [-3, 22.7, -26.5], "size": [5, 6, 17], "uv": [166, 37]} + {"origin": [-2, 22.7, -26.5], "size": [5, 6, 17], "uv": [166, 37]} ] }, { "name": "Neck1quills", "parent": "Neck1", - "pivot": [-0.5, 33.5, -22.2], + "pivot": [0.5, 33.5, -22.2], "cubes": [ - {"origin": [-0.5, 33.5, -26.2], "size": [0, 4, 7], "uv": [190, 92]} + {"origin": [0.5, 33.5, -26.2], "size": [0, 4, 7], "uv": [190, 92]} ] }, { "name": "Bodyfrontquills", "parent": "Bodyshoulders", - "pivot": [-0.5, 35.3, -15.5], + "pivot": [0.5, 35.3, -15.5], "cubes": [ - {"origin": [-0.5, 35.3, -19.5], "size": [0, 4, 10], "uv": [205, 89]} + {"origin": [0.5, 35.3, -19.5], "size": [0, 4, 10], "uv": [205, 89]} ] }, { "name": "Bodymidquills", "parent": "Bodywaist", - "pivot": [-0.5, 36.3, -6.5], + "pivot": [0.5, 36.3, -6.5], "cubes": [ - {"origin": [-0.5, 36.3, -10.5], "size": [0, 4, 11], "uv": [226, 88]} + {"origin": [0.5, 36.3, -10.5], "size": [0, 4, 11], "uv": [226, 88]} ] }, { "name": "Bodyrearquills", "parent": "Bodyhips", - "pivot": [-0.5, 36.8, 4], + "pivot": [0.5, 36.8, 4], "cubes": [ - {"origin": [-0.5, 36.8, 0], "size": [0, 4, 11], "uv": [157, 93]} + {"origin": [0.5, 36.8, 0], "size": [0, 4, 11], "uv": [157, 93]} ] }, { "name": "LeftThigh", - "parent": "root", - "pivot": [-6, 28.7, 5], + "pivot": [6, 28.7, 5], "rotation": [80.81, 0, 0], "cubes": [ - {"origin": [-11, 22.7, -8], "size": [5, 10, 16], "uv": [50, 136]} + {"origin": [6, 22.7, -8], "size": [5, 10, 16], "uv": [50, 136]} ] }, { "name": "LeftCalf1", "parent": "LeftThigh", - "pivot": [-8.5, 32.5, -7.5], + "pivot": [8.5, 32.5, -7.5], "rotation": [-38.74, 0, 0], "cubes": [ - {"origin": [-10.5, 18.5, -7.5], "size": [4, 14, 6], "uv": [54, 166]} + {"origin": [6.5, 18.5, -7.5], "size": [4, 14, 6], "uv": [54, 166]} ] }, { "name": "LeftCalf2", "parent": "LeftCalf1", - "pivot": [-8.5, 20.8, -4], + "pivot": [8.5, 20.8, -4], "rotation": [-72.14712, 0, 0], "cubes": [ - {"origin": [-10, 9.8, -5], "size": [3, 11, 3], "uv": [54, 190]} + {"origin": [7, 9.8, -5], "size": [3, 11, 3], "uv": [54, 190]} ] }, { "name": "FootLeft", "parent": "LeftCalf2", - "pivot": [-8.5, 10.6393, -2.49767], + "pivot": [8.5, 10.6393, -2.49767], "rotation": [30.57, 0, 0], "cubes": [ - {"origin": [-11, 9.63922, -9.49047], "size": [5, 2, 9], "uv": [0, 209]}, - {"origin": [-9.5, 9.63581, -9.46664], "size": [2, 2, 3], "uv": [243, 251], "mirror": true}, - {"origin": [-9, 14.27706, -3.44193], "size": [1, 1, 1], "pivot": [5.5, -4, 3.5], "rotation": [22.5, 0, 0], "uv": [26, 84], "mirror": true}, - {"origin": [-9, 15.46625, 3.4635], "size": [1, 1, 1], "pivot": [5.5, -4, 3.5], "rotation": [45, 0, 0], "uv": [26, 84], "mirror": true}, - {"origin": [-6.12008, 15.99094, -7.71027], "size": [1, 1, 1], "pivot": [4.5, -4, 3.5], "rotation": [22.5, 22.5, 0], "uv": [26, 84], "mirror": true}, - {"origin": [-6.62024, 9.63581, -14.06555], "size": [2, 2, 5], "inflate": -0.01, "pivot": [4.5, -4, 3.5], "rotation": [0, 22.5, 0], "uv": [241, 249], "mirror": true}, - {"origin": [-6.12008, 18.68309, 0.17595], "size": [1, 1, 1], "pivot": [4.5, -4, 3.5], "rotation": [45, 22.5, 0], "uv": [26, 84], "mirror": true}, - {"origin": [-6.12008, 2.0063, -18.8929], "size": [1, 1, 1], "pivot": [4.5, -4, 3.5], "rotation": [-22.5, 22.5, 0], "uv": [26, 84], "mirror": true}, - {"origin": [-9, 3.81257, -14.66283], "size": [1, 1, 1], "pivot": [5.5, -4, 3.5], "rotation": [-22.5, 0, 0], "uv": [26, 84], "mirror": true}, - {"origin": [-10.24838, 9.63581, -3.35041], "size": [2, 2, 5], "inflate": -0.01, "pivot": [6.5, -4, 3.5], "rotation": [0, -22.5, 0], "uv": [241, 249], "mirror": true}, - {"origin": [-9.74838, 11.93648, 2.20873], "size": [1, 1, 1], "pivot": [6.5, -4, 3.5], "rotation": [22.5, -22.5, 0], "uv": [26, 84], "mirror": true}, - {"origin": [-9.74838, 11.14142, 7.78833], "size": [1, 1, 1], "pivot": [6.5, -4, 3.5], "rotation": [45, -22.5, 0], "uv": [26, 84], "mirror": true}, - {"origin": [-9.74838, 6.15315, -9.01217], "size": [1, 1, 1], "pivot": [6.5, -4, 3.5], "rotation": [-22.5, -22.5, 0], "uv": [26, 84], "mirror": true} + {"origin": [6, 9.63922, -9.49047], "size": [5, 2, 9], "uv": [50, 209]} ] } ] diff --git a/common/src/main/resources/assets/jurassicrevived/geo/indoraptor.geo.json b/common/src/main/resources/assets/jurassicrevived/geo/indoraptor.geo.json index 9ab930a..9e222f2 100755 --- a/common/src/main/resources/assets/jurassicrevived/geo/indoraptor.geo.json +++ b/common/src/main/resources/assets/jurassicrevived/geo/indoraptor.geo.json @@ -4,8 +4,8 @@ { "description": { "identifier": "geometry.indoraptor", - "texture_width": 256, - "texture_height": 256, + "texture_width": 128, + "texture_height": 128, "visible_bounds_width": 13, "visible_bounds_height": 5.5, "visible_bounds_offset": [0, 2.25, 0] @@ -13,334 +13,662 @@ "bones": [ { "name": "Root", - "pivot": [0, 0.7, -13] + "pivot": [0, -2.3, -9] }, { "name": "BodyMain", "parent": "Root", - "pivot": [0.125, 35.7, 9], + "pivot": [0.075, 18.7, 4.2], "rotation": [12.5, 0, 0], "cubes": [ - {"origin": [-6.5, 29.075, -2.25], "size": [13, 18, 19], "uv": [0, 37]}, - {"origin": [-2, 44.325, -2.75], "size": [4, 3, 6], "pivot": [0, 46.825, 0.25], "rotation": [32.5, 0, 0], "uv": [124, 175]}, - {"origin": [-2, 44.325, 1.75], "size": [4, 3, 6], "pivot": [0, 46.825, 4.75], "rotation": [32.5, 0, 0], "uv": [192, 177]}, - {"origin": [-2, 44.325, 6.25], "size": [4, 3, 6], "pivot": [0, 46.825, 9.25], "rotation": [32.5, 0, 0], "uv": [22, 193]}, - {"origin": [-2, 43.825, 11.25], "size": [4, 4, 6], "pivot": [0, 47.325, 14.25], "rotation": [32.5, 0, 0], "uv": [124, 165]}, - {"origin": [3.5, 42.075, -1.5], "size": [0, 12, 19], "pivot": [3.5, 46.075, 8], "rotation": [-7.5, 0, 0], "uv": [38, 115]}, - {"origin": [-3.5, 42.075, -1.5], "size": [0, 12, 19], "pivot": [-3.5, 46.075, 8], "rotation": [-7.5, 0, 0], "uv": [76, 116]}, - {"origin": [1.75, 42.075, -1.5], "size": [0, 14, 19], "pivot": [1.75, 46.075, 8], "rotation": [-7.5, 0, 0], "uv": [104, 57]}, - {"origin": [-1.75, 42.075, -1.5], "size": [0, 14, 19], "pivot": [-1.75, 46.075, 8], "rotation": [-7.5, 0, 0], "uv": [0, 108]} + {"origin": [-3.9, 14.725, -2.55], "size": [7.8, 10.8, 11.4], "uv": [0, 0]}, + {"origin": [-1.2, 23.875, -2.85], "size": [2.4, 1.8, 3.6], "pivot": [0, 25.375, -1.05], "rotation": [32.5, 0, 0], "uv": [50, 97]}, + {"origin": [-1.2, 23.875, -0.15], "size": [2.4, 1.8, 3.6], "pivot": [0, 25.375, 1.65], "rotation": [32.5, 0, 0], "uv": [76, 98]}, + {"origin": [-1.2, 23.875, 2.55], "size": [2.4, 1.8, 3.6], "pivot": [0, 25.375, 4.35], "rotation": [32.5, 0, 0], "uv": [86, 98]}, + {"origin": [-1.2, 23.575, 5.55], "size": [2.4, 2.4, 3.6], "pivot": [0, 25.675, 7.35], "rotation": [32.5, 0, 0], "uv": [32, 78]}, + {"origin": [0.05, 23.525, -2.1], "size": [0, 8.4, 11.4], "pivot": [0.05, 25.925, 3.6], "rotation": [-6.50446, 3.74196, 29.78729], "uv": [0, 40]}, + {"origin": [-0.05, 23.525, -2.1], "size": [0, 8.4, 11.4], "pivot": [-0.05, 25.925, 3.6], "rotation": [-6.50446, -3.74196, -29.78729], "uv": [22, 49]} ] }, { "name": "BodyMiddle", "parent": "BodyMain", - "pivot": [0, 46.3177, -2.23194], + "pivot": [0, 19.07062, -0.53916], "rotation": [-12.5, 0, 0], "cubes": [ - {"origin": [-7, 24.37635, -14.67576], "size": [14, 19, 18], "pivot": [0.875, 33.87635, -6.92576], "rotation": [27.5, 0, 0], "uv": [0, 0]}, - {"origin": [-2, 38.43438, -16.17691], "size": [4, 2, 4], "pivot": [0, 39.43438, -14.17691], "rotation": [57.5, 0, 0], "uv": [160, 14]}, - {"origin": [-2, 39.68438, -14.17691], "size": [4, 2, 4], "pivot": [0, 40.68438, -12.17691], "rotation": [57.5, 0, 0], "uv": [166, 109]}, - {"origin": [-2, 41.43438, -11.67691], "size": [4, 2, 4], "pivot": [0, 42.43438, -9.67691], "rotation": [57.5, 0, 0], "uv": [176, 156]}, - {"origin": [-2, 43.18438, -8.67691], "size": [4, 2, 4], "pivot": [0, 44.18438, -6.67691], "rotation": [57.5, 0, 0], "uv": [124, 184]}, - {"origin": [-2, 43.18438, -5.17691], "size": [4, 4, 4], "pivot": [0, 46.18438, -3.17691], "rotation": [57.5, 0, 0], "uv": [142, 82]} + {"origin": [-4.2, 11.33071, -9.25669], "size": [8.4, 11.4, 8.8], "pivot": [0.525, 17.03071, -6.60669], "rotation": [27.5, 0, 0], "uv": [36, 0]}, + {"origin": [-1.2, 19.76552, -12.15738], "size": [2.4, 1.2, 2.4], "pivot": [0, 20.36552, -10.95738], "rotation": [57.5, 0, 0], "uv": [32, 83]}, + {"origin": [-1.2, 20.51552, -10.95738], "size": [2.4, 1.2, 2.4], "pivot": [0, 21.11552, -9.75738], "rotation": [57.5, 0, 0], "uv": [50, 101]}, + {"origin": [-1.2, 21.56552, -9.45738], "size": [2.4, 1.2, 2.4], "pivot": [0, 22.16552, -8.25738], "rotation": [57.5, 0, 0], "uv": [102, 9]}, + {"origin": [-1.2, 22.61552, -7.65738], "size": [2.4, 1.2, 2.4], "pivot": [0, 23.21552, -6.45738], "rotation": [57.5, 0, 0], "uv": [102, 12]}, + {"origin": [-1.2, 22.61552, -5.55738], "size": [2.4, 2.4, 2.4], "pivot": [0, 24.41552, -4.35738], "rotation": [57.5, 0, 0], "uv": [68, 100]} ] }, { "name": "BodyEnd", "parent": "BodyMiddle", - "pivot": [0, 38.98142, -8.93039], + "pivot": [0, 16.09375, -5.80946], "cubes": [ - {"origin": [-7.5, 21.87635, -23.80076], "size": [15, 17, 15], "uv": [64, 0]} + {"origin": [-4.5, 10.83071, -14.73169], "size": [9, 10.2, 9], "uv": [0, 21]} ] }, { "name": "Neck1", "parent": "BodyEnd", - "pivot": [0.02158, 37.74759, -23.84525], - "rotation": [17.5, 0, 0], + "pivot": [0.01295, 19.95345, -12.25838], + "rotation": [-27.5, 0, 0], "cubes": [ - {"origin": [-5.99997, 25.06148, -34.00359], "size": [12, 13, 11], "pivot": [0.00003, 30.06148, -26.00359], "rotation": [-10, 0, 0], "uv": [88, 91]} + {"origin": [-3, 13.96517, -16.40471], "size": [6, 6, 10], "uv": [36, 19]}, + {"origin": [-2, 11.96517, -17.40471], "size": [4, 2, 7], "uv": [68, 20]} ] }, { "name": "Neck2", "parent": "Neck1", - "pivot": [0.00003, 38.26794, -30.40296], + "pivot": [0.00002, 19.63036, -16.53143], "rotation": [-15, 0, 0], "cubes": [ - {"origin": [-3.99997, 27.7448, -40.47702], "size": [8, 11, 10], "pivot": [-1.99997, 30.7448, -35.47702], "rotation": [-2.5, 0, 0], "uv": [124, 0]}, - {"origin": [-2.99997, 26.79307, -39.63798], "size": [6, 2, 9], "pivot": [-0.99997, 30.4948, -34.72702], "rotation": [-5, 0, 0], "uv": [190, 81]}, - {"origin": [-3.00003, 36.5448, -39.72702], "size": [0, 8, 9], "pivot": [-0.00003, 32.6448, -42.52702], "rotation": [-5, 0, 0], "uv": [64, 172], "mirror": true}, - {"origin": [3.00003, 36.5448, -39.72702], "size": [0, 8, 9], "pivot": [0.00003, 32.6448, -42.52702], "rotation": [-5, 0, 0], "uv": [28, 176], "mirror": true}, - {"origin": [2.25003, 36.5448, -39.72702], "size": [0, 10, 11], "pivot": [-0.74997, 32.6448, -42.52702], "rotation": [-5, 0, 0], "uv": [134, 95], "mirror": true}, - {"origin": [-2.25003, 36.5448, -39.72702], "size": [0, 10, 11], "pivot": [0.74997, 32.6448, -42.52702], "rotation": [-5, 0, 0], "uv": [7, 146], "mirror": true}, - {"origin": [0.25003, 36.5448, -39.72702], "size": [0, 10, 11], "pivot": [-0.74997, 32.6448, -42.52702], "rotation": [-5, 0, 0], "uv": [134, 95], "mirror": true}, - {"origin": [-3.00003, 36.5448, -39.72702], "size": [0, 8, 9], "pivot": [-0.00003, 32.6448, -42.52702], "rotation": [-5, 0, 0], "uv": [72, 172], "mirror": true} + {"origin": [0.5, 15.44291, -23.49333], "size": [0, 6.4, 8.4], "pivot": [4.05, 17.84291, -18.79333], "rotation": [25.37165, -9.80181, 16.72858], "uv": [0, 77]}, + {"origin": [-3, 14.31791, -18.69333], "size": [6, 6, 3], "inflate": -0.01, "pivot": [0, 15.91791, -15.39333], "rotation": [40, 0, 0], "uv": [90, 33]}, + {"origin": [-2, 12.31791, -19.99333], "size": [4, 3, 4], "pivot": [0, 14.91791, -15.39333], "rotation": [35, 0, 0], "uv": [90, 63]}, + {"origin": [-0.5, 16.44291, -23.49333], "size": [0, 6.4, 8.4], "pivot": [-1.05, 18.84291, -18.79333], "rotation": [25.37165, 9.80181, -16.72858], "uv": [16, 78]}, + {"origin": [-3, 12.88791, -21.49333], "size": [6, 6, 4], "inflate": -0.015, "pivot": [0, 14.91791, -17.39333], "rotation": [47.5, 0, 0], "uv": [42, 76]}, + {"origin": [-1.2, 15.25854, -22.29947], "size": [2.4, 1.2, 2.4], "pivot": [0, 15.85854, -21.09947], "rotation": [82.5, 0, 0], "uv": [102, 15]}, + {"origin": [-1.2, 14.25854, -22.29947], "size": [2.4, 1.2, 1.4], "pivot": [0, 14.85854, -22.09947], "rotation": [82.5, 0, 0], "uv": [22, 47]}, + {"origin": [-1.2, 16.25854, -21.29947], "size": [2.4, 1.2, 2.4], "pivot": [0, 16.85854, -20.09947], "rotation": [67.5, 0, 0], "uv": [102, 70]}, + {"origin": [-1.2, 18.25854, -18.29947], "size": [2.4, 1.2, 2.4], "pivot": [0, 18.85854, -17.09947], "rotation": [67.5, 0, 0], "uv": [102, 73]}, + {"origin": [-1.2, 17.25854, -20.29947], "size": [2.4, 1.2, 2.4], "pivot": [0, 17.85854, -19.09947], "rotation": [67.5, 0, 0], "uv": [76, 102]}, + {"origin": [-3, 14.81791, -17.47333], "size": [6, 6, 3], "inflate": -0.005, "pivot": [0, 16.91791, -13.39333], "rotation": [22.5, 0, 0], "uv": [90, 0]} ] }, { "name": "Head", "parent": "Neck2", - "pivot": [-0.02499, 38.95899, -40.20143], - "rotation": [2.5, 0, 0], + "pivot": [0.00002, 16.23534, -21.73328], + "rotation": [55.11, 0, 0], "cubes": [ - {"origin": [-4.99997, 26.93225, -47.89828], "size": [10, 12, 8], "pivot": [0.00003, 35.03225, -42.69828], "rotation": [2.5, 0, 0], "uv": [64, 147]}, - {"origin": [-3.99997, 28.603, -58.29682], "size": [8, 7, 6], "pivot": [-0.64997, 26.653, -55.74682], "rotation": [2.46182, -0.60252, -0.16111], "uv": [190, 92]}, - {"origin": [-4.49997, 28.603, -52.29682], "size": [9, 8, 5], "pivot": [-1.14997, 26.653, -55.74682], "rotation": [2.46182, -0.60252, -0.16111], "uv": [190, 105]}, - {"origin": [-3.53358, 35.18348, -57.77598], "size": [7, 2, 11], "pivot": [0.46642, 33.68348, -53.27598], "rotation": [14.96182, -0.60252, -0.16111], "uv": [172, 52]}, - {"origin": [1.25003, 34.4783, -53.71691], "size": [3, 4, 8], "pivot": [3.15003, 36.4283, -49.81691], "rotation": [32.47272, -1.76749, 1.76833], "uv": [142, 192]}, - {"origin": [-4.25003, 34.4783, -53.71691], "size": [3, 4, 8], "pivot": [-3.15003, 36.4283, -49.81691], "rotation": [32.47272, 1.76749, -1.76833], "uv": [192, 156]}, - {"origin": [1.75003, 35.79373, -46.65019], "size": [2, 5, 1], "pivot": [3.10769, 38.74373, -46.00019], "rotation": [57.47272, -1.76749, 1.76833], "uv": [158, 82]}, - {"origin": [-3.75003, 35.79373, -46.65019], "size": [2, 5, 1], "pivot": [-3.10769, 38.74373, -46.00019], "rotation": [57.47272, 1.76749, -1.76833], "uv": [92, 167]}, - {"origin": [3.00003, 37.03225, -48.89828], "size": [0, 8, 9], "pivot": [0.00003, 33.13225, -42.69828], "rotation": [-5, 0, 0], "uv": [69, 172]}, - {"origin": [-3.00003, 37.03225, -48.89828], "size": [0, 8, 9], "pivot": [-0.00003, 33.13225, -42.69828], "rotation": [-5, 0, 0], "uv": [31, 176]}, - {"origin": [-2.25003, 37.03225, -48.89828], "size": [0, 10, 11], "pivot": [0.74997, 33.13225, -42.69828], "rotation": [-5, 0, 0], "uv": [140, 95]}, - {"origin": [0.25003, 37.03225, -48.89828], "size": [0, 10, 8], "pivot": [-0.74997, 33.13225, -42.69828], "rotation": [-5, 0, 0], "uv": [10, 149]}, - {"origin": [3.00003, 37.03225, -48.89828], "size": [0, 8, 9], "pivot": [0.00003, 33.13225, -42.69828], "rotation": [-5, 0, 0], "uv": [69, 172]}, - {"origin": [-3.00003, 37.03225, -48.89828], "size": [0, 8, 9], "pivot": [-0.00003, 33.13225, -42.69828], "rotation": [-5, 0, 0], "uv": [31, 176]}, - {"origin": [2.25003, 37.03225, -48.89828], "size": [0, 10, 11], "pivot": [-0.74997, 33.13225, -42.69828], "rotation": [-5, 0, 0], "uv": [4, 146]}, - {"origin": [-3.70003, 27.253, -58.04682], "size": [0, 6, 11], "pivot": [0.84997, 26.903, -55.49682], "rotation": [2.46182, 0.60252, 0.16111], "uv": [98, 192]}, - {"origin": [3.60003, 27.253, -58.04682], "size": [0, 6, 11], "pivot": [-0.94997, 26.903, -55.49682], "rotation": [2.46182, -0.60252, -0.16111], "uv": [120, 192]}, - {"origin": [2.6, 27.13932, -65.14575], "size": [0, 6, 7], "pivot": [2.96051, 30.13932, -58.64575], "rotation": [76.24288, 87.46556, 76.09472], "uv": [100, 147]} + {"origin": [-3.5, 9.24241, -26.68706], "size": [7, 7, 5], "uv": [66, 60]} ] }, { - "name": "jaw", + "name": "UpperJaw", "parent": "Head", - "pivot": [-0.01071, 29.89714, -46.8907], - "rotation": [-2.5, 0, 0], + "pivot": [0, 15.17241, -27.18706], "cubes": [ - {"origin": [-3.49997, 26.5695, -57.84132], "size": [7, 3, 11], "pivot": [-1.04997, 27.2195, -55.29132], "rotation": [2.46182, -0.60252, -0.16111], "uv": [160, 0]}, - {"origin": [3.25003, 27.5695, -51.04132], "size": [0, 6, 5], "pivot": [-1.29997, 27.2195, -54.49132], "rotation": [2.46182, -0.60252, -0.16111], "uv": [54, 171]}, - {"origin": [-3.25003, 27.5695, -51.04132], "size": [0, 6, 5], "pivot": [1.29997, 27.2195, -54.49132], "rotation": [2.46182, 0.60252, 0.16111], "uv": [196, 0]} + {"origin": [-2, 11.37241, -30.18706], "size": [4, 5, 4], "uv": [90, 54]}, + {"origin": [-2, 14.93974, -33.76942], "size": [4, 1, 4], "pivot": [-2, 14.97241, -32.00706], "rotation": [12.5, 0, 0], "uv": [68, 29]}, + {"origin": [-2, 11.37241, -34.18706], "size": [4, 4, 4], "uv": [86, 72]} ] }, + { + "name": "EyeCrestLEFT2", + "parent": "UpperJaw", + "pivot": [-2.35, 16.24241, -25.88706], + "rotation": [-60, 0, 5.22], + "cubes": [ + {"origin": [-4.65, 16.24241, -26.88706], "size": [1, 2, 1], "pivot": [-6, -8.02759, 3.99294], "rotation": [0, 0, 15], "uv": [104, 18]} + ] + }, + { + "name": "HeadUPPER1", + "parent": "UpperJaw", + "pivot": [0, 15.34241, -35.18706], + "rotation": [41.74, 0, 0] + }, + { + "name": "HeadUPPER2", + "parent": "HeadUPPER1", + "pivot": [0, 15.34241, -34.18706], + "rotation": [-18.26, 0, 0] + }, + { + "name": "HeadUPPER3", + "parent": "HeadUPPER2", + "pivot": [0, 15.34241, -33.18706], + "rotation": [-16.86, 0, 0], + "cubes": [ + {"origin": [-8, 13.34241, -32.18706], "size": [1, 1, 6], "pivot": [-2, -7.02759, 3.99294], "rotation": [0, -10, 0], "uv": [62, 93]} + ] + }, + { + "name": "NasalBump3", + "parent": "HeadUPPER3", + "pivot": [0, 15.34241, -33.18706], + "rotation": [23.48, 0, 0] + }, + { + "name": "NasalBump4", + "parent": "HeadUPPER3", + "pivot": [0, 15.34241, -32.18706], + "rotation": [23.48, 0, 0] + }, + { + "name": "NasalBump5", + "parent": "HeadUPPER3", + "pivot": [0, 15.34241, -31.18706], + "rotation": [23.48, 0, 0] + }, + { + "name": "NasalBump6", + "parent": "HeadUPPER3", + "pivot": [0, 15.34241, -30.18706], + "rotation": [23.48, 0, 0] + }, + { + "name": "NasalBump7", + "parent": "HeadUPPER3", + "pivot": [0, 15.34241, -29.18706], + "rotation": [23.48, 0, 0], + "cubes": [ + {"origin": [-0.5, 13.34241, -29.18706], "size": [1, 1, 2], "uv": [6, 103]} + ] + }, + { + "name": "NasalBump8", + "parent": "HeadUPPER3", + "pivot": [0, 15.34241, -28.18706], + "rotation": [23.48, 0, 0], + "cubes": [ + {"origin": [-0.5, 13.34241, -27.18706], "size": [1, 1, 1], "uv": [104, 25]} + ] + }, + { + "name": "NasalBump9", + "parent": "HeadUPPER3", + "pivot": [0, 15.34241, -27.18706], + "rotation": [23.48, 0, 0], + "cubes": [ + {"origin": [-0.5, 12.96833, -26.18706], "size": [1, 1, 1], "uv": [104, 27]} + ] + }, + { + "name": "NasalBump2", + "parent": "HeadUPPER2", + "pivot": [0, 15.34241, -34.18706], + "rotation": [18.26, 0, 0] + }, + { + "name": "HeadUPPER7", + "parent": "UpperJaw", + "pivot": [0, 14.34241, -29.18706], + "rotation": [4.15498, -2.39524, -0.71631], + "cubes": [ + {"origin": [6.99703, 14.92833, -32.15765], "size": [1, 1, 6], "pivot": [2.8703, -2.00779, 4.02235], "rotation": [0, 10, 0], "uv": [94, 80]} + ] + }, + { + "name": "yaw", + "parent": "Head", + "pivot": [0, 10.34241, -25.98706], + "cubes": [ + {"origin": [-1.5, 9.34241, -33.78706], "size": [3, 2, 8], "uv": [20, 68]} + ] + }, + { + "name": "EyeCrestRIGHT1", + "parent": "Head", + "pivot": [2.35, 16.24241, -25.88706], + "rotation": [-60, 0, -5.22], + "cubes": [ + {"origin": [3.65, 16.24241, -26.88706], "size": [1, 2, 1], "pivot": [6, -8.02759, 3.99294], "rotation": [0, 0, -15], "uv": [102, 103]} + ] + }, + { + "name": "EyeCrestRIGHT2", + "parent": "EyeCrestRIGHT1", + "pivot": [2.35, 18.14241, -26.38706], + "rotation": [-96.52, 0, 0] + }, + { + "name": "EyeCrestRIGHT3", + "parent": "EyeCrestRIGHT2", + "pivot": [2.35, 19.44241, -26.76706], + "rotation": [172.17, 0, 0] + }, + { + "name": "Teeth", + "parent": "Head", + "pivot": [0, 11.17241, -26.18706], + "cubes": [ + {"origin": [-2, 10.37241, -34.18706], "size": [4, 1, 8], "uv": [68, 11]} + ] + }, + { + "name": "Throat3", + "parent": "Head", + "pivot": [0, 13.14241, -18.38706], + "rotation": [-9.73, 0, 0] + }, { "name": "TailMain", "parent": "BodyMain", - "pivot": [0, 45.68815, 16.35822], + "pivot": [0, 24.69289, 8.61493], "rotation": [2.5, 0, 0], "cubes": [ - {"origin": [-6, 34.72222, 13.8494], "size": [12, 12, 13], "pivot": [0, 44.72222, 15.8494], "rotation": [-10, 0, 0], "uv": [64, 32]}, - {"origin": [2.5, 44.72222, 10.8494], "size": [0, 10, 13], "pivot": [0.5, 42.72222, 12.8494], "rotation": [-25, 0, 0], "uv": [176, 133]}, - {"origin": [1.25, 44.72222, 10.8494], "size": [0, 10, 13], "pivot": [-0.75, 42.72222, 12.8494], "rotation": [-25, 0, 0], "uv": [166, 164]}, - {"origin": [-1.25, 44.72222, 10.8494], "size": [0, 12, 13], "pivot": [0.75, 42.72222, 12.8494], "rotation": [-25, 0, 0], "uv": [0, 167]}, - {"origin": [-2.5, 44.72222, 10.8494], "size": [0, 10, 13], "pivot": [-0.5, 42.72222, 12.8494], "rotation": [-25, 0, 0], "uv": [180, 14]} + {"origin": [-3.6, 18.11333, 7.10964], "size": [7.2, 7.2, 7.8], "pivot": [0, 24.11333, 8.30964], "rotation": [-10, 0, 0], "uv": [36, 35]}, + {"origin": [1.25, 25.11333, 5.30964], "size": [0, 6, 7.8], "pivot": [2.45, 23.91333, 6.50964], "rotation": [-22.47096, -11.2531, -25.25766], "uv": [90, 20]}, + {"origin": [-1.25, 25.11333, 5.30964], "size": [0, 6, 7.8], "pivot": [-2.45, 23.91333, 6.50964], "rotation": [-22.47096, 11.2531, 25.25766], "uv": [62, 80]} ] }, { "name": "Tail1", "parent": "TailMain", - "pivot": [0, 44.62217, 26.80705], + "pivot": [0, 24.0533, 14.88423], "rotation": [5, 0, 0], "cubes": [ - {"origin": [-5.5, 33.96263, 23.54402], "size": [11, 11, 13], "pivot": [-0.5, 42.96263, 25.54402], "rotation": [-17.5, 0, 0], "uv": [40, 91]} + {"origin": [-3.3, 17.65758, 12.92641], "size": [6.6, 6.6, 7.8], "pivot": [-0.3, 23.05758, 14.12641], "rotation": [-17.5, 0, 0], "uv": [64, 35]} ] }, { "name": "Tail2", "parent": "Tail1", - "pivot": [-0.5, 41.00518, 36.33299], + "pivot": [-0.3, 21.88311, 20.59979], "rotation": [-10, 0, 0], "cubes": [ - {"origin": [-4.5, 31.92391, 35.35996], "size": [9, 9, 13], "pivot": [-1.5, 38.92391, 37.35996], "rotation": [-12.5, 0, 0], "uv": [114, 32]} + {"origin": [-2.7, 16.43435, 20.01598], "size": [5.4, 5.4, 7.8], "pivot": [-0.9, 20.63435, 21.21598], "rotation": [-12.5, 0, 0], "uv": [66, 48]} ] }, { "name": "Tail3", "parent": "Tail2", - "pivot": [0, 38.01245, 48.21486], + "pivot": [0, 20.08747, 27.72892], "rotation": [7.5, 0, 0], "cubes": [ - {"origin": [-4, 31.21694, 43.47877], "size": [8, 8, 13], "pivot": [-1, 37.21694, 45.47877], "rotation": [-22.5, 0, 0], "uv": [114, 116]} + {"origin": [-2.4, 16.01016, 24.88726], "size": [4.8, 4.8, 7.8], "pivot": [-0.6, 19.61016, 26.08726], "rotation": [-22.5, 0, 0], "uv": [68, 0]} ] }, { "name": "Tail4", "parent": "Tail3", - "pivot": [0.5, 34.43507, 56.09787], + "pivot": [0.3, 17.94104, 32.45872], "cubes": [ - {"origin": [-3.5, 29.33499, 54.48892], "size": [7, 7, 9], "pivot": [0.5, 34.33499, 52.48892], "rotation": [-27.5, 0, 0], "uv": [172, 65]} + {"origin": [-2.1, 14.88099, 31.49335], "size": [4.2, 4.2, 5.4], "pivot": [0.3, 17.88099, 30.29335], "rotation": [-27.5, 0, 0], "uv": [76, 80]} ] }, { "name": "Tail5", "parent": "Tail4", - "pivot": [1, 30.90871, 62.79054], + "pivot": [0.6, 15.82523, 36.47432], "rotation": [-2.5, 0, 0], "cubes": [ - {"origin": [-3, 25.64789, 61.38166], "size": [6, 6, 11], "pivot": [1, 29.64789, 61.38166], "rotation": [-27.5, 0, 0], "uv": [156, 116]} + {"origin": [-1.8, 12.66873, 35.629], "size": [3.6, 3.6, 6.6], "pivot": [0.6, 15.06873, 35.629], "rotation": [-27.5, 0, 0], "uv": [32, 86]} ] }, { "name": "Tail6", "parent": "Tail5", - "pivot": [1.5, 26.04387, 71.57284], + "pivot": [0.9, 12.90632, 41.7437], "rotation": [-12.5, 0, 0], "cubes": [ - {"origin": [-2.5, 21.35844, 71.05328], "size": [5, 5, 11], "pivot": [1.5, 24.35844, 71.05328], "rotation": [-12.5, 0, 0], "uv": [166, 187]} + {"origin": [-1.5, 10.09506, 41.43197], "size": [3, 3, 6.6], "pivot": [0.9, 11.89506, 41.43197], "rotation": [-12.5, 0, 0], "uv": [76, 89]} ] }, { "name": "Tail7", "parent": "Tail6", - "pivot": [2, 23.30431, 81.7338], + "pivot": [1.2, 11.26259, 47.84028], "rotation": [-22.5, 0, 0], "cubes": [ - {"origin": [-2, 20.04325, 82.02833], "size": [4, 4, 9], "pivot": [2, 21.65167, 83.00266], "rotation": [15, 0, 0], "uv": [190, 118]} + {"origin": [-1.2, 9.30595, 48.017], "size": [2.4, 2.4, 5.4], "pivot": [1.2, 10.271, 48.6016], "rotation": [15, 0, 0], "uv": [22, 40]} ] }, { "name": "Legs", "parent": "Root", - "pivot": [0, 35.7, 8] + "pivot": [0, 20.45, 3.6] }, { "name": "LeftThigh", "parent": "Legs", - "pivot": [6.58724, 35.58257, 7.70409], + "pivot": [3.95234, 21.37954, 3.42245], "rotation": [25, 0, 0], "cubes": [ - {"origin": [3.08724, 17.59812, 1.76928], "size": [7, 21, 13], "pivot": [9.08724, 36.59812, 12.76928], "rotation": [-12.5, 0, 0], "uv": [64, 57]} + {"origin": [1.85234, 10.58887, -0.13843], "size": [4.2, 12.6, 7.8], "pivot": [5.45234, 21.98887, 6.46157], "rotation": [-12.5, 0, 0], "uv": [44, 49], "mirror": true} ] }, { "name": "LeftLowerLeg", "parent": "LeftThigh", - "pivot": [6.58724, 20.46039, -1.77889], + "pivot": [3.95234, 12.30623, -2.26733], "cubes": [ - {"origin": [3.58724, 7.13756, 1.86241], "size": [6, 19, 9], "pivot": [6.58724, 18.63756, 7.36241], "rotation": [42.5, 0, 0], "uv": [114, 137]} + {"origin": [2.15234, 7.31254, -0.08255], "size": [3.6, 8.4, 4.4], "pivot": [3.95234, 11.21254, 3.21745], "rotation": [42.5, 0, 0], "uv": [90, 42], "mirror": true} ] }, { "name": "LeftAnkle", "parent": "LeftLowerLeg", - "pivot": [6.58724, 12.46606, 17.64857], + "pivot": [3.95234, 9.5122, 4.42225], "rotation": [-25, 0, 0], "cubes": [ - {"origin": [4.08724, -3.46839, 11.66376], "size": [5, 16, 6], "uv": [54, 189]} + {"origin": [2.45234, 1.29676, 2.44398], "size": [3, 9.6, 2.6], "pivot": [0, 3.3778, -4.55427], "rotation": [-12.5, 0, 0], "uv": [10, 92], "mirror": true} ] }, { "name": "LeftFoot", "parent": "LeftAnkle", - "pivot": [6.58724, -3.43042, 14.75119], + "pivot": [3.95234, 0.56954, 3.29644], "rotation": [25, 0, 0], "cubes": [ - {"origin": [4.05882, -2.80269, 9.32642], "size": [5, 3, 10], "pivot": [7.08724, 2.16011, 7.49999], "rotation": [-24.97202, 0.6584, 0.85848], "uv": [188, 164]} + {"origin": [1.43529, 0.7196, -0.06407], "size": [5, 2, 6], "pivot": [4.25234, 3.69728, -1.15993], "rotation": [-24.97202, 0.6584, 0.85848], "uv": [64, 72], "mirror": true} ] }, { "name": "LeftToe", "parent": "LeftFoot", - "pivot": [4.58724, -1.61105, 10.63639], - "rotation": [11.19959, 10.23537, -7.17381], + "pivot": [2.75234, 1.43459, 0.72191], + "rotation": [11.19959, 10.23537, -7.17381] + }, + { + "name": "Righttoe2", + "parent": "LeftToe", + "pivot": [2.5, 0.27598, 1.82746], + "rotation": [-81.68, 0, 0], "cubes": [ - {"origin": [4.26294, -2.90116, 8.26975], "size": [1, 2, 4], "pivot": [4.76294, -2.40116, 9.76975], "rotation": [-65, 0, 0], "uv": [146, 22]}, - {"origin": [4.26294, -0.84695, 8.64861], "size": [1, 1, 2], "pivot": [4.26294, -0.34695, 9.64861], "rotation": [-100, 0, 0], "uv": [114, 54]}, - {"origin": [4.26294, -1.34695, 8.64861], "size": [1, 2, 1], "pivot": [4.26294, 0.15305, 9.64861], "rotation": [-107.5, 0, 0], "uv": [126, 54]} + {"origin": [1.5, -1.72402, -2.17254], "size": [1, 2, 3], "uv": [60, 100], "mirror": true} + ] + }, + { + "name": "Righttoeclaw2", + "parent": "Righttoe2", + "pivot": [2, 0.27598, -1.97254], + "rotation": [-8.17, 0, 0], + "cubes": [ + {"origin": [1.5, -0.72402, -3.97254], "size": [1, 1, 2], "uv": [102, 95], "mirror": true} + ] + }, + { + "name": "Righttoeclaw5", + "parent": "Righttoeclaw2", + "pivot": [2, 0.27598, -3.97254], + "rotation": [-141.48, 0, 0], + "cubes": [ + {"origin": [1.5, 0.27598, -3.97254], "size": [1, 1, 2], "uv": [0, 103], "mirror": true} ] }, { "name": "RightThigh", "parent": "Legs", - "pivot": [-6.58724, 35.58257, 7.70409], + "pivot": [-3.95234, 21.37954, 3.42245], "rotation": [25, 0, 0], "cubes": [ - {"origin": [-10.08724, 17.59812, 1.76928], "size": [7, 21, 13], "pivot": [-9.08724, 36.59812, 12.76928], "rotation": [-12.5, 0, 0], "uv": [64, 57], "mirror": true} + {"origin": [-6.05234, 10.58887, -0.13843], "size": [4.2, 12.6, 7.8], "pivot": [-5.45234, 21.98887, 6.46157], "rotation": [-12.5, 0, 0], "uv": [44, 49]} ] }, { "name": "RightLowerLeg", "parent": "RightThigh", - "pivot": [-6.58724, 20.46039, -1.77889], + "pivot": [-3.95234, 12.30623, -2.26733], "cubes": [ - {"origin": [-9.58724, 7.13756, 1.86241], "size": [6, 19, 9], "pivot": [-6.58724, 18.63756, 7.36241], "rotation": [42.5, 0, 0], "uv": [114, 137], "mirror": true} + {"origin": [-5.75234, 7.31254, -0.08255], "size": [3.6, 8.4, 4.4], "pivot": [-3.95234, 11.21254, 3.21745], "rotation": [42.5, 0, 0], "uv": [90, 42]} ] }, { "name": "RightAnkle", "parent": "RightLowerLeg", - "pivot": [-6.58724, 12.46606, 17.64857], + "pivot": [-3.95234, 9.5122, 4.42225], "rotation": [-25, 0, 0], "cubes": [ - {"origin": [-9.08724, -3.46839, 11.66376], "size": [5, 16, 6], "uv": [54, 189], "mirror": true} + {"origin": [-5.45234, 1.29676, 2.44398], "size": [3, 9.6, 2.6], "pivot": [0, 3.3778, -4.55427], "rotation": [-12.5, 0, 0], "uv": [10, 92]} ] }, { "name": "RightFoot", "parent": "RightAnkle", - "pivot": [-6.58724, -3.43042, 14.75119], + "pivot": [-3.95234, 0.56954, 3.29644], "rotation": [25, 0, 0], "cubes": [ - {"origin": [-9.05882, -2.80269, 9.32642], "size": [5, 3, 10], "pivot": [-7.08724, 2.16011, 7.49999], "rotation": [-24.97202, -0.6584, -0.85848], "uv": [188, 164], "mirror": true} + {"origin": [-6.43529, 0.7196, -0.06407], "size": [5, 2, 6], "pivot": [-4.25234, 3.69728, -1.15993], "rotation": [-24.97202, -0.6584, -0.85848], "uv": [64, 72]} ] }, { "name": "RightToe", "parent": "RightFoot", - "pivot": [-4.58724, -1.61105, 10.63639], - "rotation": [11.19959, -10.23537, 7.17381], + "pivot": [-2.75234, 1.43459, 0.72191], + "rotation": [11.19959, -10.23537, 7.17381] + }, + { + "name": "Lefttoe2", + "parent": "RightToe", + "pivot": [-2.5, 0.27598, 1.82746], + "rotation": [-81.68, 0, 0], "cubes": [ - {"origin": [-5.26294, -2.90116, 8.26975], "size": [1, 2, 4], "pivot": [-4.76294, -2.40116, 9.76975], "rotation": [-65, 0, 0], "uv": [146, 22], "mirror": true}, - {"origin": [-5.26294, -0.84695, 8.64861], "size": [1, 1, 2], "pivot": [-4.26294, -0.34695, 9.64861], "rotation": [-100, 0, 0], "uv": [114, 54], "mirror": true}, - {"origin": [-5.26294, -1.34695, 8.64861], "size": [1, 2, 1], "pivot": [-4.26294, 0.15305, 9.64861], "rotation": [-107.5, 0, 0], "uv": [126, 54], "mirror": true} + {"origin": [-2.5, -1.72402, -2.17254], "size": [1, 2, 3], "uv": [60, 100]} + ] + }, + { + "name": "Lefttoeclaw2", + "parent": "Lefttoe2", + "pivot": [-2, 0.27598, -1.97254], + "rotation": [-8.17, 0, 0], + "cubes": [ + {"origin": [-2.5, -0.72402, -3.97254], "size": [1, 1, 2], "uv": [102, 95]} + ] + }, + { + "name": "Lefttoeclaw5", + "parent": "Lefttoeclaw2", + "pivot": [-2, 0.27598, -3.97254], + "rotation": [-141.48, 0, 0], + "cubes": [ + {"origin": [-2.5, 0.27598, -3.97254], "size": [1, 1, 2], "uv": [0, 103]} ] }, { "name": "Arms", "parent": "Root", - "pivot": [0, 25.7, -19] + "pivot": [0, 12.7, -12.6] }, { "name": "LeftShoulder", "parent": "Arms", - "pivot": [7, 25.7, -19], + "pivot": [4.2, 12.7, -10.6], "cubes": [ - {"origin": [3, 11.95, -23.75], "size": [6, 15, 10], "pivot": [8, 23.95, -22.75], "rotation": [30, 0, 0], "uv": [144, 137]} + {"origin": [2.8, 4.45, -12.45], "size": [2.6, 9, 3], "pivot": [4.8, 11.65, -13.85], "rotation": [30, 0, 0], "uv": [0, 91]} ] }, { "name": "LeftForearm", "parent": "LeftShoulder", - "pivot": [6, 17.7, -10], + "pivot": [3.6, 7.9, -8.2], + "rotation": [0, -17.5, 0], "cubes": [ - {"origin": [3.5, -0.43298, -17.54925], "size": [5, 20, 7], "pivot": [6, 16.93318, -14.36218], "rotation": [-25, 0, 0], "uv": [100, 165]}, - {"origin": [5.5, -0.43298, -16.54925], "size": [0, 19, 11], "pivot": [6, 16.93318, -14.36218], "rotation": [-17.5287, 0.04256, -0.65182], "uv": [158, 22]} + {"origin": [2.70141, 0.02021, -8.82212], "size": [2, 9, 2.2], "pivot": [4.20141, 10.43991, -8.90987], "rotation": [-25, 0, 0], "uv": [94, 87]}, + {"origin": [3.70141, 0.02021, -6.82212], "size": [0, 8, 3.2], "pivot": [4.20141, 10.43991, -6.90987], "rotation": [-25, 0, 0], "uv": [38, 95]} ] }, { "name": "LeftHand", "parent": "LeftForearm", - "pivot": [6, 2.63872, -20.94685], + "pivot": [4.20141, 1.86323, -12.86068] + }, + { + "name": "LeftHand2", + "parent": "LeftForearm", + "pivot": [3.97588, 0.91323, -12.35097] + }, + { + "name": "HandLEFT3", + "parent": "LeftHand2", + "pivot": [3.75141, 0.42, -11.57257], + "rotation": [-95.21782, -0.0095, -2.60523], "cubes": [ - {"origin": [3.5, -0.43298, -28.54925], "size": [5, 3, 10], "uv": [180, 37]} + {"origin": [2.75141, -2.58, -12.07257], "size": [2, 3, 1], "uv": [84, 29]} + ] + }, + { + "name": "Claw10", + "parent": "HandLEFT3", + "pivot": [3.75141, -1.08, -11.37257], + "rotation": [7.5, 0, 0], + "cubes": [ + {"origin": [3.25141, -5.08, -12.37257], "size": [1, 4, 1], "uv": [84, 102]} + ] + }, + { + "name": "FingerTip10", + "parent": "Claw10", + "pivot": [3.75141, -4.81, -11.94257], + "rotation": [28.7, 0, 0], + "cubes": [ + {"origin": [3.25141, -5.81, -12.44257], "size": [1, 1, 1], "uv": [28, 47]} + ] + }, + { + "name": "Claw11", + "parent": "HandLEFT3", + "pivot": [3.05141, -1.08, -10.97257], + "rotation": [7.83, 0, 23.48], + "cubes": [ + {"origin": [2.55141, -4.08, -11.97257], "size": [1, 3, 1], "uv": [12, 103]} + ] + }, + { + "name": "FingerTip11", + "parent": "Claw11", + "pivot": [3.05141, -3.81, -11.54257], + "rotation": [28.7, 0, 0], + "cubes": [ + {"origin": [2.55141, -4.81, -12.04257], "size": [1, 1, 1], "uv": [32, 47]} + ] + }, + { + "name": "Claw12", + "parent": "HandLEFT3", + "pivot": [4.45141, -1.08, -10.97257], + "rotation": [7.83, 0, -23.48], + "cubes": [ + {"origin": [3.95141, -4.08, -11.97257], "size": [1, 3, 1], "uv": [16, 103]} + ] + }, + { + "name": "FingerTip12", + "parent": "Claw12", + "pivot": [4.45141, -3.81, -11.54257], + "rotation": [28.7, 0, 0], + "cubes": [ + {"origin": [3.95141, -4.81, -12.04257], "size": [1, 1, 1], "uv": [84, 33]} + ] + }, + { + "name": "Claw13", + "parent": "HandLEFT3", + "pivot": [3.05141, -0.18, -11.37257], + "rotation": [9.7656, -9.68014, 65.48481], + "cubes": [ + {"origin": [2.55141, -2.18, -12.37257], "size": [1, 2, 1], "uv": [94, 103]} + ] + }, + { + "name": "FingerTip13", + "parent": "Claw13", + "pivot": [3.05141, -1.91, -11.94257], + "rotation": [28.7, 0, 0], + "cubes": [ + {"origin": [2.55141, -2.91, -12.44257], "size": [1, 1, 1], "uv": [90, 70]} ] }, { "name": "RightShoulder", "parent": "Arms", - "pivot": [-7, 25.7, -19], + "pivot": [-4.2, 12.7, -10.6], "cubes": [ - {"origin": [-9, 11.95, -23.75], "size": [6, 15, 10], "pivot": [-8, 23.95, -22.75], "rotation": [30, 0, 0], "uv": [144, 137], "mirror": true} + {"origin": [-5.4, 4.45, -12.45], "size": [2.6, 8, 3], "pivot": [-4.8, 11.65, -13.85], "rotation": [30, 0, 0], "uv": [20, 92]} ] }, { "name": "RightForearm", "parent": "RightShoulder", - "pivot": [-6, 17.7, -10], + "pivot": [-3.6, 7.9, -8.2], + "rotation": [0, 17.5, 0], "cubes": [ - {"origin": [-8.5, -0.43298, -17.54925], "size": [5, 20, 7], "pivot": [-6, 16.93318, -14.36218], "rotation": [-25, 0, 0], "uv": [100, 165], "mirror": true}, - {"origin": [-5.5, -0.43298, -16.54925], "size": [0, 19, 11], "pivot": [-6, 16.93318, -14.36218], "rotation": [-17.5287, -0.04256, 0.65182], "uv": [158, 22], "mirror": true} + {"origin": [-4.70141, -0.16717, -9.66735], "size": [2, 9, 2.2], "pivot": [-4.20141, 8.43991, -8.90987], "rotation": [-25, 0, 0], "uv": [30, 95]}, + {"origin": [-3.70141, -0.16717, -7.66735], "size": [0, 8, 3.2], "pivot": [-4.20141, 8.43991, -6.90987], "rotation": [-25, 0, 0], "uv": [44, 95]} ] }, { "name": "RightHand", "parent": "RightForearm", - "pivot": [-6, 2.63872, -20.94685], + "pivot": [-4.20141, 1.86323, -11.86068] + }, + { + "name": "HandRIGHT2", + "parent": "RightHand", + "pivot": [-3.75141, 0.92, -12.27257], + "rotation": [-95.21782, 0.0095, 2.60523], "cubes": [ - {"origin": [-8.5, -0.43298, -28.54925], "size": [5, 3, 10], "uv": [180, 37], "mirror": true} + {"origin": [-4.7288, -1.33747, -12.33882], "size": [2, 3, 1], "uv": [102, 76]} + ] + }, + { + "name": "Claw6", + "parent": "HandRIGHT2", + "pivot": [-3.7288, 0.16253, -11.63882], + "rotation": [7.5, 0, 0], + "cubes": [ + {"origin": [-4.2288, -3.83747, -12.63882], "size": [1, 4, 1], "uv": [102, 87]} + ] + }, + { + "name": "FingerTip6", + "parent": "Claw6", + "pivot": [-3.7288, -3.56747, -12.20882], + "rotation": [28.7, 0, 0], + "cubes": [ + {"origin": [-4.2288, -4.56747, -12.70882], "size": [1, 1, 1], "uv": [94, 70]} + ] + }, + { + "name": "Claw7", + "parent": "HandRIGHT2", + "pivot": [-3.0288, 0.16253, -11.23882], + "rotation": [7.83, 0, -23.48], + "cubes": [ + {"origin": [-3.5288, -2.83747, -12.23882], "size": [1, 3, 1], "uv": [20, 103]} + ] + }, + { + "name": "FingerTip7", + "parent": "Claw7", + "pivot": [-3.0288, -2.56747, -11.80882], + "rotation": [28.7, 0, 0], + "cubes": [ + {"origin": [-3.5288, -3.56747, -12.30882], "size": [1, 1, 1], "uv": [98, 70]} + ] + }, + { + "name": "Claw8", + "parent": "HandRIGHT2", + "pivot": [-4.4288, 0.16253, -11.23882], + "rotation": [7.83, 0, 23.48], + "cubes": [ + {"origin": [-4.9288, -2.83747, -12.23882], "size": [1, 3, 1], "uv": [24, 103]} + ] + }, + { + "name": "FingerTip8", + "parent": "Claw8", + "pivot": [-4.4288, -2.56747, -11.80882], + "rotation": [28.7, 0, 0], + "cubes": [ + {"origin": [-4.9288, -3.56747, -12.30882], "size": [1, 1, 1], "uv": [104, 21]} + ] + }, + { + "name": "Claw9", + "parent": "HandRIGHT2", + "pivot": [-3.0288, 1.06253, -11.63882], + "rotation": [9.7656, 9.68014, -65.48481], + "cubes": [ + {"origin": [-3.5288, -0.93747, -12.63882], "size": [1, 2, 1], "uv": [98, 103]} + ] + }, + { + "name": "FingerTip9", + "parent": "Claw9", + "pivot": [-3.0288, -0.66747, -12.20882], + "rotation": [28.7, 0, 0], + "cubes": [ + {"origin": [-3.5288, -1.66747, -12.70882], "size": [1, 1, 1], "uv": [104, 23]} ] } ] diff --git a/common/src/main/resources/assets/jurassicrevived/geo/titanosaurus.geo.json b/common/src/main/resources/assets/jurassicrevived/geo/titanosaurus.geo.json index 950d3be..b7fa8a2 100755 --- a/common/src/main/resources/assets/jurassicrevived/geo/titanosaurus.geo.json +++ b/common/src/main/resources/assets/jurassicrevived/geo/titanosaurus.geo.json @@ -4,9 +4,9 @@ { "description": { "identifier": "geometry.titanosaurus", - "texture_width": 256, - "texture_height": 256, - "visible_bounds_width": 22, + "texture_width": 512, + "texture_height": 512, + "visible_bounds_width": 29, "visible_bounds_height": 9.5, "visible_bounds_offset": [0, 4.25, 0] }, @@ -21,7 +21,8 @@ "pivot": [0, 30.5, 18.875], "rotation": [-7.5, 0, 0], "cubes": [ - {"origin": [-9, 19.68971, 10.83658], "size": [18, 24, 20], "uv": [82, 92]} + {"origin": [0, 44.25604, 14.7872], "size": [0, 10, 16], "uv": [232, 31]}, + {"origin": [-9, 19.68971, 10.83658], "size": [18, 27, 20], "uv": [88, 101]} ] }, { @@ -30,7 +31,7 @@ "pivot": [0, 40.89951, 14.55289], "rotation": [-7.5, 0, 0], "cubes": [ - {"origin": [-10, 17.7746, -4.75796], "size": [20, 26, 19], "uv": [82, 47]} + {"origin": [-10, 17.7746, -4.75796], "size": [20, 30, 19], "uv": [88, 52]} ] }, { @@ -39,121 +40,122 @@ "pivot": [0, 42.11092, 1.61989], "rotation": [-5, 0, 0], "cubes": [ - {"origin": [-11, 13.34867, -19.40288], "size": [22, 30, 19], "uv": [0, 47]} + {"origin": [-11, 12.34867, -22.40288], "size": [22, 35, 22], "pivot": [9.75, 15.94867, -15.80288], "rotation": [5, 0, 0], "uv": [0, 52]} ] }, { "name": "neck17", "parent": "BodyShoulders", - "pivot": [0, 38.95933, -18.71522], - "rotation": [-37.50838, -0.01453, 0.20375], + "pivot": [0, 43.95933, -23.71522], + "rotation": [-27.50838, -0.01453, 0.20375], "cubes": [ - {"origin": [-7.94581, 21.97263, -23.34593], "size": [16, 20, 18], "uv": [0, 96]} + {"origin": [-7.94581, 23.97263, -28.34593], "size": [16, 25, 18], "uv": [0, 109]} ] }, { "name": "neck", "parent": "neck17", - "pivot": [0.05419, 40.18405, -22.64442], + "pivot": [0.05419, 47.18405, -27.64442], "rotation": [-12.5, 0, 0], "cubes": [ - {"origin": [-6.94581, 23.48428, -35.53217], "size": [14, 18, 17], "uv": [104, 0]} + {"origin": [-6.94581, 26.48428, -45.53217], "size": [14, 21, 22], "uv": [104, 0]} ] }, { "name": "neck2", "parent": "neck", - "pivot": [0.05419, 38.2586, -35.45683], + "pivot": [0.05419, 43.2586, -46.45683], "rotation": [-12.5, 0, 0], "cubes": [ - {"origin": [-4.94581, 25.46627, -46.05661], "size": [10, 14, 16], "uv": [158, 92]} + {"origin": [-4.94581, 28.46627, -57.05661], "size": [10, 18, 16], "uv": [56, 187]} ] }, { "name": "neck8", "parent": "neck2", - "pivot": [0.05419, 38.3011, -46.86297], + "pivot": [0.05419, 43.3011, -57.86297], "rotation": [5, 0, 0], "cubes": [ - {"origin": [-4.44581, 26.16365, -61.2596], "size": [9, 13, 16], "uv": [160, 35]} + {"origin": [-4.44581, 30.16365, -72.2596], "size": [9, 15, 16], "uv": [108, 187]} ] }, { "name": "neck3", "parent": "neck8", - "pivot": [0.05419, 36.15721, -61.61668], + "pivot": [0.05419, 41.15721, -72.61668], "rotation": [2.5, 0, 0], "cubes": [ - {"origin": [-3.94581, 27.5736, -73.20887], "size": [8, 11, 14], "uv": [120, 165]}, - {"origin": [0.05419, 37.05818, -71.841], "size": [0, 6, 11], "uv": [108, 217]} + {"origin": [-3.94581, 31.5736, -84.20887], "size": [8, 13, 14], "uv": [210, 134]}, + {"origin": [0.05419, 42.05818, -84.841], "size": [0, 10, 13], "uv": [82, 221]} ] }, { "name": "neck4", "parent": "neck3", - "pivot": [0.05419, 37.5598, -73.55144], - "rotation": [2.5, 0, 0], + "pivot": [0.05419, 42.5598, -84.55144], + "rotation": [22.5, 0, 0], "cubes": [ - {"origin": [-3.44581, 27.90042, -82.6443], "size": [7, 10, 12], "uv": [202, 151]}, - {"origin": [0.05419, 37.05818, -83.591], "size": [0, 6, 12], "uv": [36, 167]} + {"origin": [-3.44581, 31.90042, -93.6443], "size": [7, 11, 12], "uv": [222, 76]}, + {"origin": [0.05419, 42.05818, -94.591], "size": [0, 9, 12], "uv": [146, 250]} ] }, { "name": "neck5", "parent": "neck4", - "pivot": [0.05419, 36.27239, -82.23307], + "pivot": [0.05419, 41.27239, -93.23307], "rotation": [20, 0, 0], "cubes": [ - {"origin": [-2.94581, 29.39134, -86.51039], "size": [6, 8, 5], "uv": [174, 151]}, - {"origin": [0.05419, 37.05818, -87.216], "size": [0, 6, 6], "inflate": -0.01, "uv": [68, 109]} + {"origin": [-2.94581, 31.39134, -99.51039], "size": [6, 11, 7], "uv": [170, 250]}, + {"origin": [0.05419, 42.05818, -99.216], "size": [0, 8, 8], "inflate": -0.01, "uv": [128, 251]} ] }, { "name": "neck6", "parent": "neck5", - "pivot": [0.05419, 36.8694, -86.55846], + "pivot": [0.05419, 40.8694, -99.55846], "rotation": [20, 0, 0], "cubes": [ - {"origin": [-2.94581, 29.43958, -90.96936], "size": [6, 8, 5], "inflate": -0.01, "uv": [130, 217]}, - {"origin": [0.05419, 37.05818, -91.966], "size": [0, 6, 7], "uv": [68, 96]} + {"origin": [-2.94581, 31.43958, -103.96936], "size": [6, 10, 5], "inflate": -0.01, "uv": [252, 246]}, + {"origin": [0.05419, 41.05818, -104.966], "size": [0, 8, 8], "uv": [68, 122]} ] }, { "name": "neck7", "parent": "neck6", - "pivot": [0.05419, 37.05818, -90.341], - "rotation": [12.5, 0, 0], + "pivot": [0.05419, 41.05818, -103.341], + "rotation": [-5, 0, 0], "cubes": [ - {"origin": [-2.94581, 29.62762, -93.79683], "size": [6, 8, 3], "uv": [134, 35]}, - {"origin": [0.05419, 37.18318, -93.591], "size": [0, 6, 3], "inflate": -0.01, "uv": [68, 121]} + {"origin": [-2.94581, 31.62762, -106.79683], "size": [6, 10, 4], "uv": [68, 109]}, + {"origin": [0.05419, 41.18318, -106.591], "size": [0, 7, 3], "inflate": -0.01, "uv": [68, 138]} ] }, { "name": "head", "parent": "neck7", - "pivot": [0.05419, 36.53585, -93.05097], - "rotation": [27.5, 0, 0], + "pivot": [0.05419, 37.53585, -106.05097], + "rotation": [22.5, 0, 0], "cubes": [ - {"origin": [-3.44581, 29.92483, -99.92439], "size": [7, 8, 7], "inflate": -0.01, "uv": [208, 213]}, - {"origin": [-2.44581, 34.4945, -106.22884], "size": [5, 5, 10], "uv": [32, 211]}, - {"origin": [-2.94581, 32.36613, -107.07002], "size": [6, 3, 10], "uv": [210, 137]} + {"origin": [-3.44581, 30.92483, -112.92439], "size": [7, 9, 8], "inflate": -0.01, "uv": [246, 200]}, + {"origin": [-2.5, 39.7248, -117], "size": [5, 2, 12], "inflate": -0.01, "uv": [164, 134]}, + {"origin": [-2.94581, 32.36613, -119.07002], "size": [6, 3, 9], "uv": [98, 251]}, + {"origin": [-2.5, 32.9661, -118.6], "size": [5, 7, 8], "pivot": [3.05419, 36.9517, -112.75141], "rotation": [-20, 0, 0], "uv": [196, 250]} ] }, { "name": "lowerjaw", "parent": "head", - "pivot": [0.05419, 31.74189, -99.60219], + "pivot": [0.05419, 32.74189, -112.60219], "cubes": [ - {"origin": [-2.44581, 30.4226, -106.6257], "size": [5, 2, 11], "uv": [103, 34]} + {"origin": [-2.44581, 31, -119], "size": [5, 2, 10], "uv": [176, 31]} ] }, { "name": "eyes", "parent": "head", - "pivot": [0.05419, 36.53585, -93.05097], + "pivot": [0.05419, 39.53585, -106.05097], "cubes": [ - {"origin": [3.55419, 34.41085, -97.67597], "size": [0, 2, 2], "uv": [74, 121]}, - {"origin": [-3.55419, 34.41085, -97.67597], "size": [0, 2, 2], "uv": [78, 121]} + {"origin": [3.55419, 37.41085, -110.67597], "size": [0, 2, 2], "uv": [104, 43]}, + {"origin": [-3.55419, 37.41085, -110.67597], "size": [0, 2, 2], "uv": [104, 47]} ] }, { @@ -162,89 +164,90 @@ "pivot": [0.125, 39.75221, 2.11717], "rotation": [9.7, 0, 0], "cubes": [ - {"origin": [-12, 15.06574, -12.335], "size": [24, 19, 28], "uv": [0, 0]} + {"origin": [-12, 15.06574, -12.335], "size": [24, 24, 28], "uv": [0, 0]} ] }, { "name": "tail", "parent": "Hips", "pivot": [0, 41.22941, 30.44789], - "rotation": [-7.5, 0, 0], + "rotation": [-2.5, 0, 0], "cubes": [ - {"origin": [-7, 26.98757, 27.57895], "size": [14, 16, 17], "uv": [0, 134]}, - {"origin": [-5, 22.28644, 26.86739], "size": [10, 6, 13], "pivot": [0, 33.73893, 32.47161], "rotation": [27.5, 0, 0], "uv": [78, 190]}, - {"origin": [0, 41.25604, 28.7872], "size": [0, 10, 16], "uv": [206, 64]} + {"origin": [-7, 26.98757, 27.57895], "size": [14, 18, 21], "uv": [140, 148]}, + {"origin": [-5, 22.28644, 25.86739], "size": [10, 6, 18], "pivot": [0, 33.73893, 32.47161], "rotation": [20, 0, 0], "uv": [166, 76]}, + {"origin": [0, 44.25604, 28.7872], "size": [0, 10, 16], "uv": [236, 0]} ] }, { "name": "tail2", "parent": "tail", "pivot": [0, 40.39108, 44.3215], - "rotation": [10, 0, 0], "cubes": [ - {"origin": [-6, 28.88975, 41.67539], "size": [12, 13, 17], "uv": [62, 136]}, - {"origin": [0, 40.36338, 44.13125], "size": [0, 7, 14], "inflate": -0.01, "uv": [210, 27]} + {"origin": [-6, 27.88975, 41.67539], "size": [12, 15, 24], "uv": [68, 148]}, + {"origin": [0, 41.36338, 44.13125], "size": [0, 10, 22], "inflate": -0.01, "uv": [202, 187]} ] }, { "name": "tail14", "parent": "tail2", - "pivot": [0, 38.71138, 58.67925], + "pivot": [0, 38.71138, 63.67925], "cubes": [ - {"origin": [-4.5, 30.38336, 58.64708], "size": [9, 11, 18], "uv": [120, 136]} + {"origin": [0, 41.36338, 65.13125], "size": [0, 10, 22], "inflate": -0.01, "uv": [158, 187]}, + {"origin": [-4.5, 30.38336, 63.64708], "size": [9, 11, 24], "uv": [0, 152]} ] }, { "name": "tail3", "parent": "tail14", - "pivot": [0, 38.75701, 76.55334], + "pivot": [0, 38.75701, 85.55334], "rotation": [-2.5, 0, 0], "cubes": [ - {"origin": [-3.5, 32.00789, 75.38039], "size": [7, 9, 14], "uv": [36, 188]} + {"origin": [-3.5, 32.00789, 84.38039], "size": [7, 9, 21], "uv": [0, 187]} ] }, { "name": "tail8", "parent": "tail3", - "pivot": [0, 38.48243, 89.18328], - "rotation": [2.5, 0, 0], + "pivot": [0, 38.48243, 105.18328], + "rotation": [5, 0, 0], "cubes": [ - {"origin": [-3, 33.1195, 88.98529], "size": [6, 7, 17], "uv": [160, 64]} + {"origin": [-3, 33.1195, 104.98529], "size": [6, 7, 17], "uv": [210, 161]} ] }, { "name": "tail4", "parent": "tail8", - "pivot": [0, 38.9376, 105.45731], - "rotation": [5, 0, 0], + "pivot": [0, 38.9376, 121.45731], + "rotation": [7.5, 0, 0], "cubes": [ - {"origin": [-2.5, 34.68996, 104.51119], "size": [5, 5, 17], "uv": [62, 166]} + {"origin": [-2.5, 34.68996, 120.51119], "size": [5, 5, 28], "uv": [164, 101]} ] }, { "name": "tail5", "parent": "tail4", - "pivot": [0, 38.73466, 121.28792], - "rotation": [5, 0, 0], + "pivot": [0, 38.73466, 149.28792], + "rotation": [7.5, 0, 0], "cubes": [ - {"origin": [-2, 35.49192, 120.00453], "size": [4, 4, 17], "uv": [166, 196]} + {"origin": [-2, 35.49192, 148.00453], "size": [4, 4, 29], "uv": [166, 43]} ] }, { "name": "tail6", "parent": "tail5", - "pivot": [0, 37.89689, 136.75319], + "pivot": [0, 37.89689, 177.75319], + "rotation": [-2.5, 0, 0], "cubes": [ - {"origin": [-1, 36.64057, 134.32225], "size": [2, 2, 19], "uv": [124, 196]} + {"origin": [-1, 35.64057, 175.32225], "size": [2, 3, 20], "uv": [38, 221]} ] }, { "name": "tail7", "parent": "tail6", - "pivot": [0, 37.59198, 153.03794], - "rotation": [5, 0, 0], + "pivot": [0, 36.59198, 196.03794], + "rotation": [-12.5, 0, 0], "cubes": [ - {"origin": [-0.5, 37.29467, 150.93358], "size": [1, 1, 17], "uv": [202, 173]} + {"origin": [-0.5, 36, 193.93358], "size": [1, 2, 29], "uv": [176, 0]} ] }, { @@ -253,7 +256,7 @@ "pivot": [-9.5, 29.20635, 21.26419], "rotation": [-12.5, 0, 0], "cubes": [ - {"origin": [-13.65, 15.70253, 14.39746], "size": [7, 18, 11], "uv": [0, 167]} + {"origin": [-13.65, 15.70253, 13.39746], "size": [7, 21, 12], "uv": [0, 217]} ] }, { @@ -262,7 +265,7 @@ "pivot": [-8.375, 16.44694, 19.78915], "rotation": [25, 0, 0], "cubes": [ - {"origin": [-13.375, 5.1147, 14.86493], "size": [6, 13, 9], "uv": [208, 191]} + {"origin": [-13.375, 5.1147, 14.86493], "size": [6, 13, 9], "uv": [38, 244]} ] }, { @@ -271,7 +274,7 @@ "pivot": [-8.375, 5.43062, 21.88313], "rotation": [-13.04, 0, 0], "cubes": [ - {"origin": [-13.372, -1.488, 14.83615], "size": [6, 7, 9], "inflate": -0.01, "uv": [210, 105]} + {"origin": [-13.372, -1.488, 14.83615], "size": [6, 7, 9], "inflate": -0.01, "uv": [222, 246]} ] }, { @@ -280,7 +283,7 @@ "pivot": [9.5, 29.20635, 21.26419], "rotation": [-12.5, 0, 0], "cubes": [ - {"origin": [6.65, 15.70253, 14.39746], "size": [7, 18, 11], "uv": [174, 122]} + {"origin": [6.65, 15.70253, 13.39746], "size": [7, 21, 12], "uv": [108, 218]} ] }, { @@ -289,7 +292,7 @@ "pivot": [8.375, 16.44694, 19.78915], "rotation": [25, 0, 0], "cubes": [ - {"origin": [7.375, 5.1147, 14.86493], "size": [6, 13, 9], "uv": [78, 209]} + {"origin": [7.375, 5.1147, 14.86493], "size": [6, 13, 9], "uv": [68, 244]} ] }, { @@ -298,61 +301,61 @@ "pivot": [8.375, 5.43062, 21.88313], "rotation": [-13.04, 0, 0], "cubes": [ - {"origin": [7.372, -1.488, 14.83615], "size": [6, 7, 9], "inflate": -0.01, "uv": [210, 121]} + {"origin": [7.372, -1.488, 14.83615], "size": [6, 7, 9], "inflate": -0.01, "uv": [0, 250]} ] }, { "name": "RightFrontLeg", "parent": "root", - "pivot": [-11, 33.85837, -15.07067], + "pivot": [-11, 33.85837, -17.07067], "rotation": [6.5, 0, 0], "cubes": [ - {"origin": [-16.25, 21.12111, -20.7835], "size": [8, 20, 11], "uv": [164, 165]} + {"origin": [-16.25, 21.12111, -22.7835], "size": [8, 20, 11], "uv": [146, 219]} ] }, { "name": "RightFrontKnee", "parent": "RightFrontLeg", - "pivot": [-12.375, 21.35466, -14.96243], + "pivot": [-12.375, 21.35466, -16.96243], "rotation": [-14.14, 0, 0], "cubes": [ - {"origin": [-15.75, 4.44816, -20.1735], "size": [7, 18, 9], "uv": [0, 196]} + {"origin": [-15.75, 4.44816, -22.1735], "size": [7, 18, 9], "uv": [222, 219]} ] }, { "name": "RightFrontFoot", "parent": "RightFrontKnee", - "pivot": [-11.625, 5.15409, -16.53186], + "pivot": [-11.625, 5.15409, -18.53186], "rotation": [7.5, 0, 0], "cubes": [ - {"origin": [-15.797, -0.85771, -20.26865], "size": [7, 6, 9], "inflate": -0.01, "uv": [210, 48]} + {"origin": [-15.797, -0.85771, -22.26865], "size": [7, 6, 9], "inflate": -0.01, "uv": [232, 57]} ] }, { "name": "LeftFrontLeg", "parent": "root", - "pivot": [11, 33.85837, -15.07067], + "pivot": [11, 33.85837, -17.07067], "rotation": [6.5, 0, 0], "cubes": [ - {"origin": [8.25, 21.12111, -20.7835], "size": [8, 20, 11], "uv": [166, 0]} + {"origin": [8.25, 21.12111, -22.7835], "size": [8, 20, 11], "uv": [184, 219]} ] }, { "name": "LeftFrontKnee", "parent": "LeftFrontLeg", - "pivot": [12.375, 21.35466, -14.96243], + "pivot": [12.375, 21.35466, -16.96243], "rotation": [-14.14, 0, 0], "cubes": [ - {"origin": [8.75, 4.44816, -20.1735], "size": [7, 18, 9], "uv": [204, 0]} + {"origin": [8.75, 4.44816, -22.1735], "size": [7, 18, 9], "uv": [230, 99]} ] }, { "name": "LeftFrontFoot", "parent": "LeftFrontKnee", - "pivot": [11.625, 5.15409, -16.53186], + "pivot": [11.625, 5.15409, -18.53186], "rotation": [7.5, 0, 0], "cubes": [ - {"origin": [8.797, -0.85771, -20.26865], "size": [7, 6, 9], "inflate": -0.01, "uv": [210, 90]} + {"origin": [8.797, -0.85771, -22.26865], "size": [7, 6, 9], "inflate": -0.01, "uv": [246, 185]} ] } ] diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/arambourgiania.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/arambourgiania.png index c70793a..4f87969 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/arambourgiania.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/arambourgiania.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/arambourgiania_female.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/arambourgiania_female.png index 2f0a601..fff9404 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/arambourgiania_female.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/arambourgiania_female.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/compsognathus.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/compsognathus.png index 5451135..a178146 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/compsognathus.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/compsognathus.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/compsognathus_female.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/compsognathus_female.png index 658c8ee..0b3e362 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/compsognathus_female.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/compsognathus_female.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/corythosaurus.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/corythosaurus.png index aa3880f..c364724 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/corythosaurus.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/corythosaurus.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/corythosaurus_female.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/corythosaurus_female.png index ec4cbd2..7344514 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/corythosaurus_female.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/corythosaurus_female.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/diplodocus.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/diplodocus.png index 0232a96..f2d149e 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/diplodocus.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/diplodocus.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/diplodocus_female.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/diplodocus_female.png index 965d239..647f529 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/diplodocus_female.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/diplodocus_female.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/distortus_rex.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/distortus_rex.png index 711788e..8d9bf7f 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/distortus_rex.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/distortus_rex.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/distortus_rex_female.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/distortus_rex_female.png index 5eeb12d..e1422df 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/distortus_rex_female.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/distortus_rex_female.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/giganotosaurus.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/giganotosaurus.png index 161c28f..18ca060 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/giganotosaurus.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/giganotosaurus.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/giganotosaurus_female.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/giganotosaurus_female.png index cb8d042..56c3575 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/giganotosaurus_female.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/giganotosaurus_female.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/indoraptor.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/indoraptor.png index 0c0b239..282dc6b 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/indoraptor.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/indoraptor.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/indoraptor_female.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/indoraptor_female.png index 5d2a3db..f792353 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/indoraptor_female.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/indoraptor_female.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/titanosaurus.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/titanosaurus.png index 2d66d08..7a8fbd2 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/titanosaurus.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/titanosaurus.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/entity/titanosaurus_female.png b/common/src/main/resources/assets/jurassicrevived/textures/entity/titanosaurus_female.png index 0cf3821..3745ad0 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/entity/titanosaurus_female.png and b/common/src/main/resources/assets/jurassicrevived/textures/entity/titanosaurus_female.png differ diff --git a/fabricmc/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java b/fabricmc/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java index fc941f5..bc18247 100755 --- a/fabricmc/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java +++ b/fabricmc/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java @@ -40,6 +40,24 @@ public final class JRClothConfigScreens { .build() ); + general.addEntry( + eb.startBooleanToggle(Component.literal("Dinosaur Hunger Consumption"), cfg.hungerConsumption) + .setDefaultValue(false) + .setTooltip(Component.literal("When enabled, dinosaurs slowly lose hunger over time. Disabled by default.")) + .setSaveConsumer(v -> cfg.hungerConsumption = v) + .requireRestart() + .build() + ); + + general.addEntry( + eb.startBooleanToggle(Component.literal("Dinosaur Water Consumption"), cfg.waterConsumption) + .setDefaultValue(false) + .setTooltip(Component.literal("When enabled, dinosaurs slowly lose thirst/water over time. Disabled by default.")) + .setSaveConsumer(v -> cfg.waterConsumption = v) + .requireRestart() + .build() + ); + general.addEntry( eb.startIntField(Component.literal("FE Per Second"), cfg.fePerSecond) .setDefaultValue(1000) diff --git a/gradle.properties b/gradle.properties index 9c8ad18..3f22371 100755 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ fabric.loom.multiProjectOptimisation=true mod.name=Jurassic Revived mod.id=jurassicrevived mod.group=net.cmr.jurassicrevived -mod.version=0.202.0 +mod.version=0.203.0 mod.author=CMR Team, Eli Gibbs mod.description=A Minecraft mod that brings dinosaurs back to life using ancient DNA and modern technology\nBreed, study, and build your own prehistoric park with a wide variety of creatures... mod.license=CC-BY-ND-4.0 diff --git a/minecraftforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java b/minecraftforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java index fc941f5..bc18247 100755 --- a/minecraftforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java +++ b/minecraftforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java @@ -40,6 +40,24 @@ public final class JRClothConfigScreens { .build() ); + general.addEntry( + eb.startBooleanToggle(Component.literal("Dinosaur Hunger Consumption"), cfg.hungerConsumption) + .setDefaultValue(false) + .setTooltip(Component.literal("When enabled, dinosaurs slowly lose hunger over time. Disabled by default.")) + .setSaveConsumer(v -> cfg.hungerConsumption = v) + .requireRestart() + .build() + ); + + general.addEntry( + eb.startBooleanToggle(Component.literal("Dinosaur Water Consumption"), cfg.waterConsumption) + .setDefaultValue(false) + .setTooltip(Component.literal("When enabled, dinosaurs slowly lose thirst/water over time. Disabled by default.")) + .setSaveConsumer(v -> cfg.waterConsumption = v) + .requireRestart() + .build() + ); + general.addEntry( eb.startIntField(Component.literal("FE Per Second"), cfg.fePerSecond) .setDefaultValue(1000) diff --git a/neoforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java b/neoforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java index fc941f5..bc18247 100755 --- a/neoforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java +++ b/neoforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java @@ -40,6 +40,24 @@ public final class JRClothConfigScreens { .build() ); + general.addEntry( + eb.startBooleanToggle(Component.literal("Dinosaur Hunger Consumption"), cfg.hungerConsumption) + .setDefaultValue(false) + .setTooltip(Component.literal("When enabled, dinosaurs slowly lose hunger over time. Disabled by default.")) + .setSaveConsumer(v -> cfg.hungerConsumption = v) + .requireRestart() + .build() + ); + + general.addEntry( + eb.startBooleanToggle(Component.literal("Dinosaur Water Consumption"), cfg.waterConsumption) + .setDefaultValue(false) + .setTooltip(Component.literal("When enabled, dinosaurs slowly lose thirst/water over time. Disabled by default.")) + .setSaveConsumer(v -> cfg.waterConsumption = v) + .requireRestart() + .build() + ); + general.addEntry( eb.startIntField(Component.literal("FE Per Second"), cfg.fePerSecond) .setDefaultValue(1000)