Merge pull request #28 from classic-mods-revived/achillobator

achillobator
This commit is contained in:
Eli Gibbs
2026-06-01 14:51:31 -04:00
committed by GitHub
49 changed files with 6580 additions and 11 deletions
@@ -110,6 +110,7 @@ public class CommonClientClass {
EntityRendererRegistry.register(ModEntities.TITANOSAURUS, TitanosaurusRenderer::new);
EntityRendererRegistry.register(ModEntities.TROODON, TroodonRenderer::new);
EntityRendererRegistry.register(ModEntities.UTAHRAPTOR, UtahraptorRenderer::new);
EntityRendererRegistry.register(ModEntities.ACHILLOBATOR, AchillobatorRenderer::new);
if (Platform.isFabric()) {
registerSpawnEggColors();
@@ -442,6 +442,9 @@ public class ModBlocks {
public static final RegistrySupplier<Block> ZHENYUANOPTERUS_EGG = registerBlock("zhenyuanopterus_egg",
() -> new EggBlock(BlockBehaviour.Properties.of().strength(4f).requiresCorrectToolForDrops(), ModEntities.ZHENYUANOPTERUS));
public static final RegistrySupplier<Block> ACHILLOBATOR_EGG = registerBlock("achillobator_egg",
() -> new EggBlock(BlockBehaviour.Properties.of().strength(4f).requiresCorrectToolForDrops(), ModEntities.ACHILLOBATOR));
public static final RegistrySupplier<Block> INCUBATED_APATOSAURUS_EGG = registerBlock("incubated_apatosaurus_egg",
@@ -663,6 +666,9 @@ public class ModBlocks {
public static final RegistrySupplier<Block> INCUBATED_ZHENYUANOPTERUS_EGG = registerBlock("incubated_zhenyuanopterus_egg",
() -> new IncubatedEggBlock(BlockBehaviour.Properties.of().strength(4f).requiresCorrectToolForDrops(), ModEntities.ZHENYUANOPTERUS));
public static final RegistrySupplier<Block> INCUBATED_ACHILLOBATOR_EGG = registerBlock("incubated_achillobator_egg",
() -> new IncubatedEggBlock(BlockBehaviour.Properties.of().strength(4f).requiresCorrectToolForDrops(), ModEntities.ACHILLOBATOR));
// --- Helper Methods ---
@@ -104,6 +104,7 @@ public class ModBlockEntities {
ModBlocks.TUPUXUARA_EGG.get(),
ModBlocks.UTAHRAPTOR_EGG.get(),
ModBlocks.ZHENYUANOPTERUS_EGG.get(),
ModBlocks.ACHILLOBATOR_EGG.get(),
ModBlocks.INCUBATED_APATOSAURUS_EGG.get(),
ModBlocks.INCUBATED_ALBERTOSAURUS_EGG.get(),
ModBlocks.INCUBATED_VELOCIRAPTOR_EGG.get(),
@@ -176,7 +177,8 @@ public class ModBlockEntities {
ModBlocks.INCUBATED_TROPEOGNATHUS_EGG.get(),
ModBlocks.INCUBATED_TUPUXUARA_EGG.get(),
ModBlocks.INCUBATED_UTAHRAPTOR_EGG.get(),
ModBlocks.INCUBATED_ZHENYUANOPTERUS_EGG.get()
ModBlocks.INCUBATED_ZHENYUANOPTERUS_EGG.get(),
ModBlocks.INCUBATED_ACHILLOBATOR_EGG.get()
).build(null));
public static final RegistrySupplier<BlockEntityType<DNAExtractorBlockEntity>> DNA_EXTRACTOR_BE =
@@ -134,6 +134,7 @@ public class ModBlockLootTableProvider {
helper.dropSelf(ModBlocks.TUPUXUARA_EGG.get());
helper.dropSelf(ModBlocks.UTAHRAPTOR_EGG.get());
helper.dropSelf(ModBlocks.ZHENYUANOPTERUS_EGG.get());
helper.dropSelf(ModBlocks.ACHILLOBATOR_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_APATOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_ALBERTOSAURUS_EGG.get());
@@ -208,6 +209,7 @@ public class ModBlockLootTableProvider {
helper.dropSelf(ModBlocks.INCUBATED_TUPUXUARA_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_UTAHRAPTOR_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_ZHENYUANOPTERUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_ACHILLOBATOR_EGG.get());
helper.dropSelf(ModBlocks.ROYAL_FERN.get());
helper.add(ModBlocks.POTTED_ROYAL_FERN.get(), helper.createPotFlowerItemTable(ModBlocks.ROYAL_FERN.get()));
@@ -196,6 +196,7 @@ public class ModBlockStateProvider {
helper.eggLike(ModBlocks.TUPUXUARA_EGG.get());
helper.eggLike(ModBlocks.UTAHRAPTOR_EGG.get());
helper.eggLike(ModBlocks.ZHENYUANOPTERUS_EGG.get());
helper.eggLike(ModBlocks.ACHILLOBATOR_EGG.get());
helper.eggLike(ModBlocks.INCUBATED_VELOCIRAPTOR_EGG.get());
helper.eggLike(ModBlocks.INCUBATED_TYRANNOSAURUS_REX_EGG.get());
@@ -270,6 +271,7 @@ public class ModBlockStateProvider {
helper.eggLike(ModBlocks.INCUBATED_TUPUXUARA_EGG.get());
helper.eggLike(ModBlocks.INCUBATED_UTAHRAPTOR_EGG.get());
helper.eggLike(ModBlocks.INCUBATED_ZHENYUANOPTERUS_EGG.get());
helper.eggLike(ModBlocks.INCUBATED_ACHILLOBATOR_EGG.get());
helper.customFenceMultipart(
ModBlocks.LOW_SECURITY_FENCE_POLE.get(),
@@ -142,7 +142,8 @@ public class ModBlockTagProvider {
ModBlocks.INCUBATED_TROPEOGNATHUS_EGG.get(),
ModBlocks.INCUBATED_TUPUXUARA_EGG.get(),
ModBlocks.INCUBATED_UTAHRAPTOR_EGG.get(),
ModBlocks.INCUBATED_ZHENYUANOPTERUS_EGG.get()
ModBlocks.INCUBATED_ZHENYUANOPTERUS_EGG.get(),
ModBlocks.INCUBATED_ACHILLOBATOR_EGG.get()
);
helper.tag(BlockTags.MINEABLE_WITH_SHOVEL);
@@ -496,5 +496,12 @@ public class ModEntityLootTableProvider {
.add(LootItem.lootTableItem(ModItems.FRESH_ZHENYUANOPTERUS_SKULL.get()))
)
);
helper.add(ModEntities.ACHILLOBATOR.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_ACHILLOBATOR_SKULL.get()))
)
);
}
}
@@ -36,7 +36,6 @@ public class ModItemModelProvider {
helper.spawnEgg(ModItems.TRICERATOPS_SPAWN_EGG.get());
helper.spawnEgg(ModItems.TYRANNOSAURUS_REX_SPAWN_EGG.get());
helper.spawnEgg(ModItems.VELOCIRAPTOR_SPAWN_EGG.get());
helper.spawnEgg(ModItems.BARYONYX_SPAWN_EGG.get());
helper.spawnEgg(ModItems.CARNOTAURUS_SPAWN_EGG.get());
helper.spawnEgg(ModItems.CONCAVENATOR_SPAWN_EGG.get());
@@ -96,6 +95,7 @@ public class ModItemModelProvider {
helper.spawnEgg(ModItems.TITANOSAURUS_SPAWN_EGG.get());
helper.spawnEgg(ModItems.TROODON_SPAWN_EGG.get());
helper.spawnEgg(ModItems.UTAHRAPTOR_SPAWN_EGG.get());
helper.spawnEgg(ModItems.ACHILLOBATOR_SPAWN_EGG.get());
helper.basicItemModel(ModItems.FROG_MATERIAL.get());
helper.basicItemModel(ModItems.FROG_DNA.get());
@@ -186,6 +186,7 @@ public class ModItemModelProvider {
helper.basicItemModel(ModItems.TUPUXUARA_SKULL_FOSSIL.get());
helper.basicItemModel(ModItems.UTAHRAPTOR_SKULL_FOSSIL.get());
helper.basicItemModel(ModItems.ZHENYUANOPTERUS_SKULL_FOSSIL.get());
helper.basicItemModel(ModItems.ACHILLOBATOR_SKULL_FOSSIL.get());
helper.basicItemModel(ModItems.FRESH_APATOSAURUS_SKULL.get());
helper.basicItemModel(ModItems.FRESH_ALBERTOSAURUS_SKULL.get());
@@ -260,6 +261,7 @@ public class ModItemModelProvider {
helper.basicItemModel(ModItems.FRESH_TUPUXUARA_SKULL.get());
helper.basicItemModel(ModItems.FRESH_UTAHRAPTOR_SKULL.get());
helper.basicItemModel(ModItems.FRESH_ZHENYUANOPTERUS_SKULL.get());
helper.basicItemModel(ModItems.FRESH_ACHILLOBATOR_SKULL.get());
helper.basicItemModel(ModItems.APATOSAURUS_TISSUE.get());
helper.basicItemModel(ModItems.ALBERTOSAURUS_TISSUE.get());
@@ -334,6 +336,7 @@ public class ModItemModelProvider {
helper.basicItemModel(ModItems.TUPUXUARA_TISSUE.get());
helper.basicItemModel(ModItems.UTAHRAPTOR_TISSUE.get());
helper.basicItemModel(ModItems.ZHENYUANOPTERUS_TISSUE.get());
helper.basicItemModel(ModItems.ACHILLOBATOR_TISSUE.get());
helper.basicItemModel(ModItems.APATOSAURUS_DNA.get());
helper.basicItemModel(ModItems.ALBERTOSAURUS_DNA.get());
@@ -408,6 +411,7 @@ public class ModItemModelProvider {
helper.basicItemModel(ModItems.TUPUXUARA_DNA.get());
helper.basicItemModel(ModItems.UTAHRAPTOR_DNA.get());
helper.basicItemModel(ModItems.ZHENYUANOPTERUS_DNA.get());
helper.basicItemModel(ModItems.ACHILLOBATOR_DNA.get());
helper.basicItemModel(ModItems.APATOSAURUS_SYRINGE.get());
helper.basicItemModel(ModItems.ALBERTOSAURUS_SYRINGE.get());
@@ -482,6 +486,7 @@ public class ModItemModelProvider {
helper.basicItemModel(ModItems.TUPUXUARA_SYRINGE.get());
helper.basicItemModel(ModItems.UTAHRAPTOR_SYRINGE.get());
helper.basicItemModel(ModItems.ZHENYUANOPTERUS_SYRINGE.get());
helper.basicItemModel(ModItems.ACHILLOBATOR_SYRINGE.get());
helper.simpleBlockItemModel(ModBlocks.APATOSAURUS_EGG.get());
helper.simpleBlockItemModel(ModBlocks.ALBERTOSAURUS_EGG.get());
@@ -556,6 +561,7 @@ public class ModItemModelProvider {
helper.simpleBlockItemModel(ModBlocks.TUPUXUARA_EGG.get());
helper.simpleBlockItemModel(ModBlocks.UTAHRAPTOR_EGG.get());
helper.simpleBlockItemModel(ModBlocks.ZHENYUANOPTERUS_EGG.get());
helper.simpleBlockItemModel(ModBlocks.ACHILLOBATOR_EGG.get());
helper.basicItemModel(ModBlocks.LOW_SECURITY_FENCE_POLE.get().asItem());
helper.basicItemModel(ModBlocks.LOW_SECURITY_FENCE_WIRE.get().asItem());
@@ -638,6 +644,7 @@ public class ModItemModelProvider {
helper.simpleBlockItemModel(ModBlocks.INCUBATED_TUPUXUARA_EGG.get());
helper.simpleBlockItemModel(ModBlocks.INCUBATED_UTAHRAPTOR_EGG.get());
helper.simpleBlockItemModel(ModBlocks.INCUBATED_ZHENYUANOPTERUS_EGG.get());
helper.simpleBlockItemModel(ModBlocks.INCUBATED_ACHILLOBATOR_EGG.get());
helper.flowerItem(ModBlocks.ROYAL_FERN.get());
helper.flowerItem(ModBlocks.HORSETAIL_FERN.get());
@@ -87,7 +87,8 @@ public class ModItemTagProvider {
ModItems.TROPEOGNATHUS_TISSUE.get(),
ModItems.TUPUXUARA_TISSUE.get(),
ModItems.UTAHRAPTOR_TISSUE.get(),
ModItems.ZHENYUANOPTERUS_TISSUE.get()
ModItems.ZHENYUANOPTERUS_TISSUE.get(),
ModItems.ACHILLOBATOR_TISSUE.get()
);
helper.tag(ModTags.Items.DNA,
@@ -164,7 +165,8 @@ public class ModItemTagProvider {
ModItems.TROPEOGNATHUS_DNA.get(),
ModItems.TUPUXUARA_DNA.get(),
ModItems.UTAHRAPTOR_DNA.get(),
ModItems.ZHENYUANOPTERUS_DNA.get()
ModItems.ZHENYUANOPTERUS_DNA.get(),
ModItems.ACHILLOBATOR_DNA.get()
);
helper.tag(ModTags.Items.SYRINGES,
@@ -241,7 +243,8 @@ public class ModItemTagProvider {
ModItems.TROPEOGNATHUS_SYRINGE.get(),
ModItems.TUPUXUARA_SYRINGE.get(),
ModItems.UTAHRAPTOR_SYRINGE.get(),
ModItems.ZHENYUANOPTERUS_SYRINGE.get()
ModItems.ZHENYUANOPTERUS_SYRINGE.get(),
ModItems.ACHILLOBATOR_SYRINGE.get()
);
helper.tag(ModTags.Items.EGGS,
@@ -317,7 +320,8 @@ public class ModItemTagProvider {
Item.byBlock(ModBlocks.TROPEOGNATHUS_EGG.get()),
Item.byBlock(ModBlocks.TUPUXUARA_EGG.get()),
Item.byBlock(ModBlocks.UTAHRAPTOR_EGG.get()),
Item.byBlock(ModBlocks.ZHENYUANOPTERUS_EGG.get())
Item.byBlock(ModBlocks.ZHENYUANOPTERUS_EGG.get()),
Item.byBlock(ModBlocks.ACHILLOBATOR_EGG.get())
);
helper.tag(ModTags.Items.FOSSILS,
@@ -391,7 +395,8 @@ public class ModItemTagProvider {
ModItems.TROPEOGNATHUS_SKULL_FOSSIL.get(),
ModItems.TUPUXUARA_SKULL_FOSSIL.get(),
ModItems.UTAHRAPTOR_SKULL_FOSSIL.get(),
ModItems.ZHENYUANOPTERUS_SKULL_FOSSIL.get()
ModItems.ZHENYUANOPTERUS_SKULL_FOSSIL.get(),
ModItems.ACHILLOBATOR_SKULL_FOSSIL.get()
);
helper.tag(ModTags.Items.SKULLS,
@@ -468,7 +473,8 @@ public class ModItemTagProvider {
ModItems.FRESH_TROPEOGNATHUS_SKULL.get(),
ModItems.FRESH_TUPUXUARA_SKULL.get(),
ModItems.FRESH_UTAHRAPTOR_SKULL.get(),
ModItems.FRESH_ZHENYUANOPTERUS_SKULL.get()
ModItems.FRESH_ZHENYUANOPTERUS_SKULL.get(),
ModItems.FRESH_ACHILLOBATOR_SKULL.get()
);
}
}
@@ -194,6 +194,7 @@ public class ModRecipeProvider {
helper.dnaExtracting(ModItems.TEST_TUBE.get(), ModItems.TUPUXUARA_TISSUE.get(), ModItems.TUPUXUARA_DNA.get(), 1);
helper.dnaExtracting(ModItems.TEST_TUBE.get(), ModItems.UTAHRAPTOR_TISSUE.get(), ModItems.UTAHRAPTOR_DNA.get(), 1);
helper.dnaExtracting(ModItems.TEST_TUBE.get(), ModItems.ZHENYUANOPTERUS_TISSUE.get(), ModItems.ZHENYUANOPTERUS_DNA.get(), 1);
helper.dnaExtracting(ModItems.TEST_TUBE.get(), ModItems.ACHILLOBATOR_TISSUE.get(), ModItems.ACHILLOBATOR_DNA.get(), 1);
helper.fossilCleaning(ModBlocks.STONE_FOSSIL.get(), ModItems.APATOSAURUS_SKULL_FOSSIL.get(), 1);
helper.fossilCleaning(ModBlocks.DEEPSLATE_FOSSIL.get(), ModItems.VELOCIRAPTOR_SKULL_FOSSIL.get(), 1);
@@ -268,6 +269,7 @@ public class ModRecipeProvider {
helper.fossilGrinding(ModItems.TUPUXUARA_SKULL_FOSSIL.get(), ModItems.TUPUXUARA_TISSUE.get(), 1);
helper.fossilGrinding(ModItems.UTAHRAPTOR_SKULL_FOSSIL.get(), ModItems.UTAHRAPTOR_TISSUE.get(), 1);
helper.fossilGrinding(ModItems.ZHENYUANOPTERUS_SKULL_FOSSIL.get(), ModItems.ZHENYUANOPTERUS_TISSUE.get(), 1);
helper.fossilGrinding(ModItems.ACHILLOBATOR_SKULL_FOSSIL.get(), ModItems.ACHILLOBATOR_TISSUE.get(), 1);
helper.skullToTissue(ModItems.FRESH_ALBERTOSAURUS_SKULL.get(), ModItems.ALBERTOSAURUS_TISSUE.get(), 1);
helper.skullToTissue(ModItems.FRESH_APATOSAURUS_SKULL.get(), ModItems.APATOSAURUS_TISSUE.get(), 1);
@@ -342,6 +344,7 @@ public class ModRecipeProvider {
helper.skullToTissue(ModItems.FRESH_TUPUXUARA_SKULL.get(), ModItems.TUPUXUARA_TISSUE.get(), 1);
helper.skullToTissue(ModItems.FRESH_UTAHRAPTOR_SKULL.get(), ModItems.UTAHRAPTOR_TISSUE.get(), 1);
helper.skullToTissue(ModItems.FRESH_ZHENYUANOPTERUS_SKULL.get(), ModItems.ZHENYUANOPTERUS_TISSUE.get(), 1);
helper.skullToTissue(ModItems.FRESH_ACHILLOBATOR_SKULL.get(), ModItems.ACHILLOBATOR_TISSUE.get(), 1);
helper.dnaAnalyzing(ModItems.TEST_TUBE.get(), ModItems.FROG_MATERIAL.get(), ModItems.FROG_DNA.get(), 1);
@@ -434,6 +437,7 @@ public class ModRecipeProvider {
helper.embryonicMachine(ModItems.SYRINGE.get(), ModItems.TUPUXUARA_DNA.get(), ModItems.FROG_DNA.get(), ModItems.TUPUXUARA_SYRINGE.get(), 1);
helper.embryonicMachine(ModItems.SYRINGE.get(), ModItems.UTAHRAPTOR_DNA.get(), ModItems.FROG_DNA.get(), ModItems.UTAHRAPTOR_SYRINGE.get(), 1);
helper.embryonicMachine(ModItems.SYRINGE.get(), ModItems.ZHENYUANOPTERUS_DNA.get(), ModItems.FROG_DNA.get(), ModItems.ZHENYUANOPTERUS_SYRINGE.get(), 1);
helper.embryonicMachine(ModItems.SYRINGE.get(), ModItems.ACHILLOBATOR_DNA.get(), ModItems.FROG_DNA.get(), ModItems.ACHILLOBATOR_SYRINGE.get(), 1);
helper.embryoCalcification(ModItems.ALBERTOSAURUS_SYRINGE.get(), Items.EGG, ModBlocks.ALBERTOSAURUS_EGG.get(), 1);
helper.embryoCalcification(ModItems.APATOSAURUS_SYRINGE.get(), Items.EGG, ModBlocks.APATOSAURUS_EGG.get(), 1);
@@ -508,6 +512,7 @@ public class ModRecipeProvider {
helper.embryoCalcification(ModItems.TUPUXUARA_SYRINGE.get(), Items.EGG, ModBlocks.TUPUXUARA_EGG.get(), 1);
helper.embryoCalcification(ModItems.UTAHRAPTOR_SYRINGE.get(), Items.EGG, ModBlocks.UTAHRAPTOR_EGG.get(), 1);
helper.embryoCalcification(ModItems.ZHENYUANOPTERUS_SYRINGE.get(), Items.EGG, ModBlocks.ZHENYUANOPTERUS_EGG.get(), 1);
helper.embryoCalcification(ModItems.ACHILLOBATOR_SYRINGE.get(), Items.EGG, ModBlocks.ACHILLOBATOR_EGG.get(), 1);
helper.incubating(ModBlocks.APATOSAURUS_EGG.get(), ModBlocks.INCUBATED_APATOSAURUS_EGG.get(), 1);
helper.incubating(ModBlocks.ALBERTOSAURUS_EGG.get(), ModBlocks.INCUBATED_ALBERTOSAURUS_EGG.get(), 1);
@@ -582,6 +587,7 @@ public class ModRecipeProvider {
helper.incubating(ModBlocks.TUPUXUARA_EGG.get(), ModBlocks.INCUBATED_TUPUXUARA_EGG.get(), 1);
helper.incubating(ModBlocks.UTAHRAPTOR_EGG.get(), ModBlocks.INCUBATED_UTAHRAPTOR_EGG.get(), 1);
helper.incubating(ModBlocks.ZHENYUANOPTERUS_EGG.get(), ModBlocks.INCUBATED_ZHENYUANOPTERUS_EGG.get(), 1);
helper.incubating(ModBlocks.ACHILLOBATOR_EGG.get(), ModBlocks.INCUBATED_ACHILLOBATOR_EGG.get(), 1);
helper.amberRandomDNA(ModItems.TEST_TUBE.get(), ModItems.MOSQUITO_IN_AMBER.get(), ModItems.FROG_DNA.get(), 1);
}
@@ -331,6 +331,10 @@ public class ModEntities {
ENTITIES.register("utahraptor", () -> EntityType.Builder.of(UtahraptorEntity::new, MobCategory.CREATURE)
.sized(1.0f, 2.0f).build("utahraptor"));
public static final RegistrySupplier<EntityType<AchillobatorEntity>> ACHILLOBATOR =
ENTITIES.register("achillobator", () -> EntityType.Builder.of(AchillobatorEntity::new, MobCategory.CREATURE)
.sized(1.0f, 2.0f).build("achillobator"));
public static void registerAttributes() {
EntityAttributeRegistry.register(APATOSAURUS, ApatosaurusEntity::createAttributes);
EntityAttributeRegistry.register(ALBERTOSAURUS, AlbertosaurusEntity::createAttributes);
@@ -407,6 +411,7 @@ public class ModEntities {
EntityAttributeRegistry.register(TITANOSAURUS, TitanosaurusEntity::createAttributes);
EntityAttributeRegistry.register(TROODON, TroodonEntity::createAttributes);
EntityAttributeRegistry.register(UTAHRAPTOR, UtahraptorEntity::createAttributes);
EntityAttributeRegistry.register(ACHILLOBATOR, AchillobatorEntity::createAttributes);
}
public static void registerSpawnPlacements() {
@@ -489,6 +494,7 @@ public class ModEntities {
registerGroundAnimalSpawn(UTAHRAPTOR);
registerGroundAnimalSpawn(VELOCIRAPTOR);
registerGroundAnimalSpawn(ZHENYUANOPTERUS);
registerGroundAnimalSpawn(ACHILLOBATOR);
}
private static <T extends Animal> void registerGroundAnimalSpawn(RegistrySupplier<EntityType<T>> entityType) {
@@ -0,0 +1,112 @@
package net.cmr.jurassicrevived.entity.client;
import com.google.common.collect.Maps;
import net.cmr.jurassicrevived.Constants;
import net.cmr.jurassicrevived.entity.custom.AchillobatorEntity;
import net.minecraft.Util;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
/*? if <=1.20.1 {*/
import software.bernie.geckolib.core.animation.AnimationState;
/*?} else {*/
/*import software.bernie.geckolib.animation.AnimationState;
*//*?}*/
import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.constant.DataTickets;
import software.bernie.geckolib.model.GeoModel;
import java.util.Map;
public class AchillobatorModel extends GeoModel<AchillobatorEntity> {
private static final Map<AchillobatorVariant, ResourceLocation> LOCATION_BY_VARIANT =
Util.make(Maps.newEnumMap(AchillobatorVariant.class), map -> {
map.put(AchillobatorVariant.MALE, Constants.rl("textures/entity/achillobator.png"));
map.put(AchillobatorVariant.FEMALE, Constants.rl("textures/entity/achillobator_female.png"));
});
// Model-local "currently applied" offsets; cleared before each entity render
private float[] appliedYaw = null;
private float[] appliedRoll = null;
@Override
public ResourceLocation getModelResource(AchillobatorEntity animatable) {
return Constants.rl("geo/achillobator.geo.json");
}
@Override
public ResourceLocation getTextureResource(AchillobatorEntity animatable) {
return LOCATION_BY_VARIANT.get(animatable.getVariant());
}
@Override
public ResourceLocation getAnimationResource(AchillobatorEntity animatable) {
return Constants.rl("animations/achillobator.animation.json");
}
@Override
public void setCustomAnimations(AchillobatorEntity entity, long id, AnimationState<AchillobatorEntity> state) {
super.setCustomAnimations(entity, id, state);
String[] tailBones = { "tail1", "tail2", "tail3", "tail4", "tail5", "tail6" };
int n = tailBones.length;
if (appliedYaw == null || appliedYaw.length != n) {
appliedYaw = new float[n];
appliedRoll = new float[n];
}
// 1) Clear previous offsets (from the last entity rendered with this model instance)
for (int i = 0; i < n; i++) {
if (appliedYaw[i] == 0.0f && appliedRoll[i] == 0.0f) continue;
GeoBone bone = (GeoBone) getAnimationProcessor().getBone(tailBones[i]);
if (bone == null) continue;
if (appliedYaw[i] != 0.0f) bone.setRotY(bone.getRotY() - appliedYaw[i]);
if (appliedRoll[i] != 0.0f) bone.setRotZ(bone.getRotZ() - appliedRoll[i]);
appliedYaw[i] = 0.0f;
appliedRoll[i] = 0.0f;
}
// 2) Interpolated sway for extra smoothness between ticks
float sway = entity.getTailSwayOffset(state.getPartialTick()); // [-1, 1]
// Tuning
float maxYawDeg = 22.0f; // increased max sweep
float swayGain = 1.35f; // amplifies overall power
float rollFraction = 0.40f; // slightly stronger roll for heft
float deg2rad = (float)Math.PI / 180f;
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
for (int i = 0; i < n; i++) {
GeoBone bone = (GeoBone) getAnimationProcessor().getBone(tailBones[i]);
if (bone == null) continue;
float w = weights[i];
float yaw = baseYaw * w;
float roll = baseRoll * w;
// OVERRIDE animations on Y/Z only: keep the model's predefined X bend intact
// Do NOT reset rotX here, so the upward bend stays
bone.setRotY(yaw);
bone.setRotZ(roll);
appliedYaw[i] = yaw;
appliedRoll[i] = roll;
}
GeoBone head = (GeoBone) getAnimationProcessor().getBone("body1");
if (head != null) {
var entityData = state.getData(DataTickets.ENTITY_MODEL_DATA);
float clampedYawDeg = Mth.clamp(entityData.netHeadYaw(), -20.0f, 20.0f);
head.setRotY(clampedYawDeg * Mth.DEG_TO_RAD);
}
}
}
@@ -0,0 +1,26 @@
package net.cmr.jurassicrevived.entity.client;
import com.mojang.blaze3d.vertex.PoseStack;
import net.cmr.jurassicrevived.entity.custom.AchillobatorEntity;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.util.Mth;
import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.renderer.GeoEntityRenderer;
public class AchillobatorRenderer extends GeoEntityRenderer<AchillobatorEntity> {
private final float animalScale = 1.3F;
public AchillobatorRenderer(EntityRendererProvider.Context renderManager) {
super(renderManager, new AchillobatorModel());
}
@Override
public void scaleModelForRender(float widthScale, float heightScale, PoseStack poseStack, AchillobatorEntity animatable, BakedGeoModel model, boolean isReRender, float partialTick, int packedLight, int packedOverlay) {
poseStack.scale(animalScale, animalScale, animalScale);
if(animatable.isBaby()) {
float growthProgress = Mth.clamp((24000.0F + animatable.getSyncedAge()) / 24000.0F, 0.0F, 1.0F);
float scale = Mth.lerp(growthProgress, 0.2F, 1.0F);
poseStack.scale(scale, scale, scale);
}
}
}
@@ -0,0 +1,26 @@
package net.cmr.jurassicrevived.entity.client;
import java.util.Arrays;
import java.util.Comparator;
public enum AchillobatorVariant {
MALE(0),
FEMALE(1);
private static final AchillobatorVariant[] BY_ID = Arrays.stream(values()).sorted(
Comparator.comparingInt(AchillobatorVariant::getId)).toArray(AchillobatorVariant[]::new);
private final int id;
AchillobatorVariant(int id) {
this.id = id;
}
public int getId() {
return id;
}
public static AchillobatorVariant byId(int id) {
return BY_ID[id % BY_ID.length];
}
}
@@ -0,0 +1,319 @@
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.client.AchillobatorVariant;
import net.cmr.jurassicrevived.sound.ModSounds;
import net.minecraft.Util;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataAccessor;
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.util.Mth;
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.animal.Animal;
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 {*/
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animatable.instance.SingletonAnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager;
import software.bernie.geckolib.core.animation.Animation;
import software.bernie.geckolib.core.animation.AnimationController;
import software.bernie.geckolib.core.animation.RawAnimation;
import software.bernie.geckolib.core.object.PlayState;
/*?} else {*/
/*import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.animatable.instance.SingletonAnimatableInstanceCache;
import software.bernie.geckolib.animation.*;
*//*?}*/
public class AchillobatorEntity extends DinoEntityBase implements GeoEntity {
private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this);
private static final EntityDataAccessor<Integer> VARIANT =
SynchedEntityData.defineId(AchillobatorEntity.class, EntityDataSerializers.INT);
private static final EntityDataAccessor<Integer> DATA_SYNCED_AGE =
SynchedEntityData.defineId(AchillobatorEntity.class, EntityDataSerializers.INT);
// Procedural tail sway state (client-side use for rendering)
private float tailSwayOffset; // Smoothed offset in range roughly [-1, 1]
private float tailSwayVelocity; // Internal velocity for spring-damper
private float tailSwayPrev; // Previous frame value for interpolation
public AchillobatorEntity(EntityType<? extends Animal> 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
public boolean isCarnivore() {
return true;
}
@Override
public boolean isMarine() {
return false;
}
@Override
public boolean isAmphibious() {
return false;
}
@Override
public Block getEggBlock() {
return ModBlocks.INCUBATED_ACHILLOBATOR_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)
.add(Attributes.ARMOR, 0D)
.add(Attributes.FOLLOW_RANGE, 32D)
.add(Attributes.KNOCKBACK_RESISTANCE, 0D)
.add(Attributes.ATTACK_KNOCKBACK, 0D)
.add(Attributes.ATTACK_DAMAGE, 16D);
}
@Nullable
@Override
public AgeableMob getBreedOffspring(ServerLevel pLevel, AgeableMob pOtherParent) {
AgeableMob child = ModEntities.ACHILLOBATOR.get().create(pLevel);
if (child instanceof AchillobatorEntity baby) {
AchillobatorVariant randomVariant = Util.getRandom(AchillobatorVariant.values(), this.random);
baby.setVariant(randomVariant);
}
return child;
}
@Override
public boolean doHurtTarget(Entity target) {
boolean hit = super.doHurtTarget(target);
if (!level().isClientSide && hit && target instanceof LivingEntity) {
if (this.level() instanceof ServerLevel serverLevel) {
this.triggerAnim("attackController", "attack");
this.playSound(ModSounds.ACHILLOBATOR_ATTACK.get(), 1.0F, 1.0F);
}
}
return hit;
}
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar controllers) {
controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> {
if (state.isMoving())
return state.setAndContinue(AchillobatorEntity.this.isSprinting() ? RawAnimation.begin().then("anim.achillobator.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.achillobator.walk", Animation.LoopType.LOOP));
return state.setAndContinue(RawAnimation.begin().then("anim.achillobator.idle", Animation.LoopType.LOOP));
}));
controllers.add(new AnimationController<>(this, "attackController", 5, state -> PlayState.STOP)
.triggerableAnim("attack", RawAnimation.begin().then("anim.achillobator.attack", Animation.LoopType.PLAY_ONCE)));
controllers.add(new AnimationController<>(this, "mouthController", 5, state -> PlayState.STOP)
.triggerableAnim("mouth", RawAnimation.begin().then("anim.achillobator.mouth", Animation.LoopType.PLAY_ONCE)));
}
private float getSignedTurnDelta() {
// Only consider the body (torso) rotation so head look does not affect tail sway
return Mth.wrapDegrees(this.yBodyRot - this.yBodyRotO);
}
private int mouthAnimCooldown = 0;
@Override
public void tick() {
super.tick();
if (!level().isClientSide) {
this.entityData.set(DATA_SYNCED_AGE, this.getAge());
var maxHealthAttr = getAttribute(Attributes.MAX_HEALTH);
if (maxHealthAttr != null) {
double baseAdult = DefaultAttributes.getSupplier((EntityType<? extends LivingEntity>) this.getType()).getValue(Attributes.MAX_HEALTH);
double desired = this.isBaby() ? baseAdult * 0.10D : baseAdult;
if (maxHealthAttr.getBaseValue() != desired) {
double oldMax = maxHealthAttr.getBaseValue();
double healthRatio = this.getHealth() / (float) oldMax;
maxHealthAttr.setBaseValue(desired);
this.setHealth((float) (desired * Mth.clamp(healthRatio, 0.0F, 1.0F)));
}
}
}
if (!level().isClientSide) {
if (mouthAnimCooldown > 0) {
mouthAnimCooldown--;
} else {
this.triggerAnim("mouthController", "mouth");
this.playSound(ModSounds.ACHILLOBATOR_CALL.get(), 1.0F, 1.0F);
// 30s60s in ticks
mouthAnimCooldown = this.random.nextInt(1200 - 600 + 1) + 600;
}
}
if (level().isClientSide) {
// Capture previous for smooth interpolation between ticks
this.tailSwayPrev = this.tailSwayOffset;
updateProceduralTailSway();
}
}
private void updateProceduralTailSway() {
// Turn input derived from rotation deltas; works even when standing still and turning
float turnDegrees = getSignedTurnDelta();
// Deadzone to ignore tiny jitter so the tail can return to center cleanly
float deadzoneDeg = 0.6f; // smaller deadzone for more responsiveness
float turnInput = 0.0f;
if (Math.abs(turnDegrees) >= deadzoneDeg) {
// Higher sensitivity so small in-place turns still affect the model
turnInput = Mth.clamp(turnDegrees / 15.0f, -1.0f, 1.0f);
}
// Target offset: keep intuitive sign (positive input -> positive sway)
float target = turnInput;
// One-pole low-pass (no bounce). Larger alpha => snappier and less "stiff".
float alpha = 0.24f; // try 0.200.30 to taste
tailSwayOffset += (target - tailSwayOffset) * alpha;
// Snap tiny residuals to zero so it visibly settles
if (Math.abs(tailSwayOffset) < 0.003f) {
tailSwayOffset = 0.0f;
}
// No oscillation velocity retained
tailSwayVelocity = 0.0f;
tailSwayOffset = Mth.clamp(tailSwayOffset, -1.5f, 1.5f);
}
// Expose to the model for bone rotation
public float getTailSwayOffset() {
return tailSwayOffset;
}
// Interpolated sway for smooth rendering between ticks
public float getTailSwayOffset(float partialTick) {
return Mth.lerp(Mth.clamp(partialTick, 0.0f, 1.0f), tailSwayPrev, tailSwayOffset);
}
/*? if <=1.20.1 {*/
@Override
protected void defineSynchedData() {
super.defineSynchedData();
this.entityData.define(VARIANT, 0);
this.entityData.define(DATA_SYNCED_AGE, 0);
}
/*?} else {*/
/*@Override
protected void defineSynchedData(SynchedEntityData.Builder pBuilder) {
super.defineSynchedData(pBuilder);
pBuilder.define(VARIANT, 0);
pBuilder.define(DATA_SYNCED_AGE, 0);
}
*//*?}*/
public int getSyncedAge() {
return this.entityData.get(DATA_SYNCED_AGE);
}
public int getTypeVariant() {
return this.entityData.get(VARIANT);
}
public AchillobatorVariant getVariant() {
return AchillobatorVariant.byId(this.getTypeVariant() & 255);
}
private void setVariant(AchillobatorVariant variant) {
this.entityData.set(VARIANT, variant.getId() & 255);
}
@Override
public boolean canMate(Animal other) {
if (!super.canMate(other)) return false;
if (!(other instanceof AchillobatorEntity that)) return false;
return this.getVariant() != that.getVariant();
}
@Override
public void addAdditionalSaveData(CompoundTag pCompound) {
super.addAdditionalSaveData(pCompound);
pCompound.putInt("Variant", this.getTypeVariant());
}
@Override
public void readAdditionalSaveData(CompoundTag pCompound) {
super.readAdditionalSaveData(pCompound);
this.entityData.set(VARIANT, pCompound.getInt("Variant"));
}
/*? if <=1.20.1 {*/
@Override
public SpawnGroupData finalizeSpawn(ServerLevelAccessor pLevel, DifficultyInstance pDifficulty, MobSpawnType pReason, @Nullable SpawnGroupData pSpawnData, @Nullable CompoundTag pDataTag) {
AchillobatorVariant variant = Util.getRandom(AchillobatorVariant.values(), this.random);
this.setVariant(variant);
return super.finalizeSpawn(pLevel, pDifficulty, pReason, pSpawnData, pDataTag);
}
/*?} else {*/
/*@Override
public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnType, @Nullable SpawnGroupData spawnGroupData) {
AchillobatorVariant variant = Util.getRandom(AchillobatorVariant.values(), this.random);
this.setVariant(variant);
return super.finalizeSpawn(level, difficulty, spawnType, spawnGroupData);
}
*//*?}*/
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return cache;
}
@Override
protected @Nullable SoundEvent getHurtSound(DamageSource damageSource) {
return ModSounds.ACHILLOBATOR_HURT.get();
}
@Override
protected @Nullable SoundEvent getDeathSound() {
return ModSounds.ACHILLOBATOR_DEATH.get();
}
@Override
protected @Nullable SoundEvent getAmbientSound() {
return ModSounds.ACHILLOBATOR_CALL.get();
}
}
@@ -124,6 +124,7 @@ public class ModCreativeTabs {
builder.icon(() -> new ItemStack(ModItems.TYRANNOSAURUS_REX_DNA.get().asItem()));
builder.displayItems((params, output) -> {
// Skull fossils (alphabetical)
output.accept(ModItems.ACHILLOBATOR_SKULL_FOSSIL.get());
output.accept(ModItems.ALBERTOSAURUS_SKULL_FOSSIL.get());
output.accept(ModItems.ALLOSAURUS_SKULL_FOSSIL.get());
output.accept(ModItems.ALVAREZSAURUS_SKULL_FOSSIL.get());
@@ -196,6 +197,7 @@ public class ModCreativeTabs {
output.accept(ModItems.ZHENYUANOPTERUS_SKULL_FOSSIL.get());
// Fresh skulls (alphabetical)
output.accept(ModItems.FRESH_ACHILLOBATOR_SKULL.get());
output.accept(ModItems.FRESH_ALBERTOSAURUS_SKULL.get());
output.accept(ModItems.FRESH_ALLOSAURUS_SKULL.get());
output.accept(ModItems.FRESH_ALVAREZSAURUS_SKULL.get());
@@ -270,6 +272,7 @@ public class ModCreativeTabs {
output.accept(ModItems.FRESH_ZHENYUANOPTERUS_SKULL.get());
// Tissue (alphabetical)
output.accept(ModItems.ACHILLOBATOR_TISSUE.get());
output.accept(ModItems.ALBERTOSAURUS_TISSUE.get());
output.accept(ModItems.ALLOSAURUS_TISSUE.get());
output.accept(ModItems.ALVAREZSAURUS_TISSUE.get());
@@ -345,6 +348,7 @@ public class ModCreativeTabs {
output.accept(ModItems.ZHENYUANOPTERUS_TISSUE.get());
// DNA (alphabetical)
output.accept(ModItems.ACHILLOBATOR_DNA.get());
output.accept(ModItems.ALBERTOSAURUS_DNA.get());
output.accept(ModItems.ALLOSAURUS_DNA.get());
output.accept(ModItems.ALVAREZSAURUS_DNA.get());
@@ -420,6 +424,7 @@ public class ModCreativeTabs {
output.accept(ModItems.ZHENYUANOPTERUS_DNA.get());
// Syringes (alphabetical)
output.accept(ModItems.ACHILLOBATOR_SYRINGE.get());
output.accept(ModItems.ALBERTOSAURUS_SYRINGE.get());
output.accept(ModItems.ALLOSAURUS_SYRINGE.get());
output.accept(ModItems.ALVAREZSAURUS_SYRINGE.get());
@@ -495,6 +500,7 @@ public class ModCreativeTabs {
output.accept(ModItems.ZHENYUANOPTERUS_SYRINGE.get());
// Eggs (alphabetical)
output.accept(ModBlocks.ACHILLOBATOR_EGG.get());
output.accept(ModBlocks.ALBERTOSAURUS_EGG.get());
output.accept(ModBlocks.ALLOSAURUS_EGG.get());
output.accept(ModBlocks.ALVAREZSAURUS_EGG.get());
@@ -575,6 +581,7 @@ public class ModCreativeTabs {
builder.title(Component.translatable("itemGroup." + Constants.MOD_ID + ".dino_tab"));
builder.icon(() -> new ItemStack(ModItems.TYRANNOSAURUS_REX_SPAWN_EGG.get().asItem()));
builder.displayItems((params, output) -> {
output.accept(ModItems.ACHILLOBATOR_SPAWN_EGG.get());
output.accept(ModItems.ALBERTOSAURUS_SPAWN_EGG.get());
output.accept(ModItems.ALLOSAURUS_SPAWN_EGG.get());
output.accept(ModItems.ALVAREZSAURUS_SPAWN_EGG.get());
@@ -179,6 +179,8 @@ public class ModItems {
() -> new CustomGenderedSpawnEggItem(ModEntities.TROODON, 0xff414632, 0xff640600, new Item.Properties()));
public static final RegistrySupplier<Item> UTAHRAPTOR_SPAWN_EGG = ITEMS.register("utahraptor_spawn_egg",
() -> new CustomGenderedSpawnEggItem(ModEntities.UTAHRAPTOR, 0xff474131, 0xffdad8db, new Item.Properties()));
public static final RegistrySupplier<Item> ACHILLOBATOR_SPAWN_EGG = ITEMS.register("achillobator_spawn_egg",
() -> new CustomGenderedSpawnEggItem(ModEntities.ACHILLOBATOR, 0xffcbb791, 0xff8e4338, new Item.Properties()));
public static final RegistrySupplier<Item> TEST_TUBE = ITEMS.register("test_tube", () -> new Item(new Item.Properties().stacksTo(16)));
@@ -262,6 +264,7 @@ public class ModItems {
public static final RegistrySupplier<Item> TUPUXUARA_SKULL_FOSSIL = ITEMS.register("tupuxuara_skull_fossil", () -> new Item(new Item.Properties().stacksTo(16)));
public static final RegistrySupplier<Item> UTAHRAPTOR_SKULL_FOSSIL = ITEMS.register("utahraptor_skull_fossil", () -> new Item(new Item.Properties().stacksTo(16)));
public static final RegistrySupplier<Item> ZHENYUANOPTERUS_SKULL_FOSSIL = ITEMS.register("zhenyuanopterus_skull_fossil", () -> new Item(new Item.Properties().stacksTo(16)));
public static final RegistrySupplier<Item> ACHILLOBATOR_SKULL_FOSSIL = ITEMS.register("achillobator_skull_fossil", () -> new Item(new Item.Properties().stacksTo(16)));
public static final RegistrySupplier<Item> FRESH_VELOCIRAPTOR_SKULL = ITEMS.register("fresh_velociraptor_skull", () -> new Item(new Item.Properties().stacksTo(16)));
@@ -337,6 +340,7 @@ public class ModItems {
public static final RegistrySupplier<Item> FRESH_TUPUXUARA_SKULL = ITEMS.register("fresh_tupuxuara_skull", () -> new Item(new Item.Properties().stacksTo(16)));
public static final RegistrySupplier<Item> FRESH_UTAHRAPTOR_SKULL = ITEMS.register("fresh_utahraptor_skull", () -> new Item(new Item.Properties().stacksTo(16)));
public static final RegistrySupplier<Item> FRESH_ZHENYUANOPTERUS_SKULL = ITEMS.register("fresh_zhenyuanopterus_skull", () -> new Item(new Item.Properties().stacksTo(16)));
public static final RegistrySupplier<Item> FRESH_ACHILLOBATOR_SKULL = ITEMS.register("fresh_achillobator_skull", () -> new Item(new Item.Properties().stacksTo(16)));
// Tissue group
@@ -413,6 +417,7 @@ public class ModItems {
public static final RegistrySupplier<Item> TUPUXUARA_TISSUE = ITEMS.register("tupuxuara_tissue", () -> new Item(new Item.Properties().stacksTo(8).rarity(Rarity.EPIC)));
public static final RegistrySupplier<Item> UTAHRAPTOR_TISSUE = ITEMS.register("utahraptor_tissue", () -> new Item(new Item.Properties().stacksTo(8).rarity(Rarity.EPIC)));
public static final RegistrySupplier<Item> ZHENYUANOPTERUS_TISSUE = ITEMS.register("zhenyuanopterus_tissue", () -> new Item(new Item.Properties().stacksTo(8).rarity(Rarity.EPIC)));
public static final RegistrySupplier<Item> ACHILLOBATOR_TISSUE = ITEMS.register("achillobator_tissue", () -> new Item(new Item.Properties().stacksTo(8).rarity(Rarity.EPIC)));
// DNA group
@@ -489,6 +494,7 @@ public class ModItems {
public static final RegistrySupplier<Item> TUPUXUARA_DNA = ITEMS.register("tupuxuara_dna", () -> new Item(new Item.Properties().stacksTo(8).rarity(Rarity.RARE)));
public static final RegistrySupplier<Item> UTAHRAPTOR_DNA = ITEMS.register("utahraptor_dna", () -> new Item(new Item.Properties().stacksTo(8).rarity(Rarity.RARE)));
public static final RegistrySupplier<Item> ZHENYUANOPTERUS_DNA = ITEMS.register("zhenyuanopterus_dna", () -> new Item(new Item.Properties().stacksTo(8).rarity(Rarity.RARE)));
public static final RegistrySupplier<Item> ACHILLOBATOR_DNA = ITEMS.register("achillobator_dna", () -> new Item(new Item.Properties().stacksTo(8).rarity(Rarity.RARE)));
// Syringe group
@@ -565,6 +571,7 @@ public class ModItems {
public static final RegistrySupplier<Item> TUPUXUARA_SYRINGE = ITEMS.register("tupuxuara_syringe", () -> new Item(new Item.Properties().stacksTo(8).rarity(Rarity.UNCOMMON)));
public static final RegistrySupplier<Item> UTAHRAPTOR_SYRINGE = ITEMS.register("utahraptor_syringe", () -> new Item(new Item.Properties().stacksTo(8).rarity(Rarity.UNCOMMON)));
public static final RegistrySupplier<Item> ZHENYUANOPTERUS_SYRINGE = ITEMS.register("zhenyuanopterus_syringe", () -> new Item(new Item.Properties().stacksTo(8).rarity(Rarity.UNCOMMON)));
public static final RegistrySupplier<Item> ACHILLOBATOR_SYRINGE = ITEMS.register("achillobator_syringe", () -> new Item(new Item.Properties().stacksTo(8).rarity(Rarity.UNCOMMON)));
public static void register() {
@@ -351,6 +351,11 @@ public class ModSounds {
public static final Supplier<SoundEvent> ZHENYUANOPTERUS_HURT = registerSoundEvent("zhenyuanopterus_hurt");
public static final Supplier<SoundEvent> ZHENYUANOPTERUS_DEATH = registerSoundEvent("zhenyuanopterus_death");
public static final Supplier<SoundEvent> ACHILLOBATOR_CALL = registerSoundEvent("achillobator_call");
public static final Supplier<SoundEvent> ACHILLOBATOR_ATTACK = registerSoundEvent("achillobator_attack");
public static final Supplier<SoundEvent> ACHILLOBATOR_HURT = registerSoundEvent("achillobator_hurt");
public static final Supplier<SoundEvent> ACHILLOBATOR_DEATH = registerSoundEvent("achillobator_death");
private static Supplier<SoundEvent> registerSoundEvent(String name) {
ResourceLocation id = Constants.rl(name);
@@ -83,7 +83,8 @@ public final class ModSpawnDefinitions {
spawn("tyrannosaurus_rex", ModEntities.TYRANNOSAURUS_REX, 5, 1, 2, BiomeTags.IS_TAIGA, BiomeTags.IS_OVERWORLD),
spawn("utahraptor", ModEntities.UTAHRAPTOR, 16, 1, 3, BiomeTags.IS_TAIGA, BiomeTags.IS_FOREST),
spawn("velociraptor", ModEntities.VELOCIRAPTOR, 26, 2, 4, BiomeTags.IS_BADLANDS, BiomeTags.IS_OVERWORLD),
spawn("zhenyuanopterus", ModEntities.ZHENYUANOPTERUS, 7, 2, 5, BiomeTags.IS_BEACH, BiomeTags.IS_MOUNTAIN)
spawn("zhenyuanopterus", ModEntities.ZHENYUANOPTERUS, 7, 2, 5, BiomeTags.IS_BEACH, BiomeTags.IS_MOUNTAIN),
spawn("achillobator", ModEntities.ACHILLOBATOR, 12, 1, 2, BiomeTags.IS_TAIGA)
);
@SafeVarargs
@@ -0,0 +1,517 @@
{
"format_version": "1.12.0",
"minecraft:geometry": [
{
"description": {
"identifier": "geometry.achillobator",
"texture_width": 135,
"texture_height": 100,
"visible_bounds_width": 8,
"visible_bounds_height": 3.5,
"visible_bounds_offset": [0, 1.25, 0]
},
"bones": [
{
"name": "root",
"pivot": [0, 21.8, -6.9]
},
{
"name": "body3",
"parent": "root",
"pivot": [0, 21.8, -6.9],
"rotation": [5.38, 0, 0]
},
{
"name": "body2",
"parent": "body3",
"pivot": [0, 21.6, -6.1],
"rotation": [-24.38, 0, 0],
"cubes": [
{"origin": [-3.5, 12.41245, -11.95218], "size": [7, 8, 8], "pivot": [0, 16.41245, -7.95218], "rotation": [25, 0, 0], "uv": [43, 83]}
]
},
{
"name": "body1",
"parent": "body2",
"pivot": [0, 17.61245, -10.05218],
"cubes": [
{"origin": [-3, 12.21245, -14.15218], "size": [6, 6, 4], "uv": [76, 89]}
]
},
{
"name": "neck1",
"parent": "body1",
"pivot": [0, 16.71245, -11.15218],
"rotation": [-21.73, 0, 0],
"cubes": [
{"origin": [-2.5, 11.71245, -16.15218], "size": [5, 5, 4], "uv": [3, 69]}
]
},
{
"name": "neck2",
"parent": "neck1",
"pivot": [0, 16.51245, -14.75218],
"rotation": [-15.66, 0, 0],
"cubes": [
{"origin": [-2, 11.51245, -17.75218], "size": [4, 5, 3], "uv": [24, 70]}
]
},
{
"name": "neck3",
"parent": "neck2",
"pivot": [0, 16.51245, -17.65218],
"rotation": [16.81, 0, 0],
"cubes": [
{"origin": [-2, 11.51245, -20.65218], "size": [4, 5, 3], "uv": [41, 70]}
]
},
{
"name": "neck4",
"parent": "neck3",
"pivot": [0, 16.51245, -20.65218],
"rotation": [19.79, 0, 0],
"cubes": [
{"origin": [-2, 11.51245, -23.65218], "size": [4, 5, 3], "uv": [57, 70]}
]
},
{
"name": "head",
"parent": "neck4",
"pivot": [0, 16.11245, -24.55218],
"rotation": [24.87, 0, 0],
"cubes": [
{"origin": [-2.5, 10.11245, -28.55218], "size": [5, 6, 5], "uv": [67, 57]}
]
},
{
"name": "upperjaw",
"parent": "head",
"pivot": [0, 15.51245, -26.55218],
"cubes": [
{"origin": [-2, 11.51245, -34.55218], "size": [4, 4, 6], "uv": [89, 56]}
]
},
{
"name": "Snout ridge main",
"parent": "upperjaw",
"pivot": [-1.5, 14.41245, -34.35218],
"rotation": [96.33, 0, 0],
"cubes": [
{"origin": [-1.5, 8.41245, -34.35218], "size": [3, 6, 1], "uv": [95, 47]}
]
},
{
"name": "Snout ridge L",
"parent": "Snout ridge main",
"pivot": [0.4, 11.91245, -35.25218],
"rotation": [14.54, 17.65, 0],
"cubes": [
{"origin": [0.4, 8.91245, -35.25218], "size": [1, 3, 2], "uv": [107, 48]}
]
},
{
"name": "Snout ridge R",
"parent": "Snout ridge main",
"pivot": [-1.3, 11.91245, -35.55218],
"rotation": [14.54, -17.65, 0],
"cubes": [
{"origin": [-1.3, 8.91245, -35.55218], "size": [1, 3, 2], "uv": [84, 48]}
]
},
{
"name": "down_jaw",
"parent": "head",
"pivot": [0, 10.71245, -28.15218],
"rotation": [-2.48, 0, 0],
"cubes": [
{"origin": [-1.5, 10.31245, -34.15218], "size": [3, 1, 6], "uv": [89, 67]}
]
},
{
"name": "Quill 1",
"parent": "head",
"pivot": [0, 15.51245, -24.75218],
"rotation": [165.77, 0, 0],
"cubes": [
{"origin": [0, 13.51245, -25.75218], "size": [0, 2, 3], "uv": [0, 0]}
]
},
{
"name": "Teeth",
"parent": "head",
"pivot": [0, 16.11245, -24.55218],
"cubes": [
{"origin": [-2, 10.51245, -34.55218], "size": [4, 1, 6], "uv": [90, 78]}
]
},
{
"name": "Quill 7",
"parent": "head",
"pivot": [0, 15.51245, -24.75218],
"rotation": [168.77, 0, 0],
"cubes": [
{"origin": [0.7, 13.11245, -26.45218], "size": [0, 2, 3], "uv": [0, 0]}
]
},
{
"name": "Quill 8",
"parent": "head",
"pivot": [0, 15.51245, -24.75218],
"rotation": [168.77, 0, 0],
"cubes": [
{"origin": [-0.7, 13.11245, -26.45218], "size": [0, 2, 3], "uv": [0, 0]}
]
},
{
"name": "Under neck",
"parent": "neck4",
"pivot": [-1.5, 13.81245, -25.25218],
"rotation": [7.83, 0, 0],
"cubes": [
{"origin": [-1.5, 9.81245, -25.25218], "size": [3, 3, 7], "uv": [67, 72]}
]
},
{
"name": "Quill 2",
"parent": "neck4",
"pivot": [0, 15.31245, -21.15218],
"rotation": [168.52, 0, 0],
"cubes": [
{"origin": [0, 12.81245, -22.15218], "size": [0, 2, 4], "uv": [0, 2]}
]
},
{
"name": "Quill 3",
"parent": "neck4",
"pivot": [1, 15.31245, -21.95218],
"rotation": [168.66, 0, 0],
"cubes": [
{"origin": [1, 13.31245, -22.95218], "size": [0, 2, 3], "uv": [0, 0]}
]
},
{
"name": "Quill 5",
"parent": "neck4",
"pivot": [-1, 15.31245, -21.95218],
"rotation": [168.66, 0, 0],
"cubes": [
{"origin": [-1, 13.31245, -22.95218], "size": [0, 2, 3], "uv": [0, 0]}
]
},
{
"name": "Quill 4",
"parent": "neck4",
"pivot": [0, 15.31245, -21.15218],
"rotation": [168.52, 0, 0],
"cubes": [
{"origin": [0.5, 12.81245, -23.15218], "size": [0, 2, 4], "uv": [0, 2]}
]
},
{
"name": "Quill 6",
"parent": "neck4",
"pivot": [0, 15.31245, -21.15218],
"rotation": [168.52, 0, 0],
"cubes": [
{"origin": [-0.5, 12.81245, -23.15218], "size": [0, 2, 4], "uv": [0, 2]}
]
},
{
"name": "Left arm",
"parent": "body2",
"pivot": [4.4, 13.8, -10.4],
"rotation": [72.02, 0, 0],
"cubes": [
{"origin": [3.4, 7.8, -10.4], "size": [2, 6, 2], "uv": [118, 3]}
]
},
{
"name": "Left forearm",
"parent": "Left arm",
"pivot": [4.4, 7.8, -9.9],
"rotation": [-104.11, 0, 0],
"cubes": [
{"origin": [3.39, 3.8, -11.9], "size": [2, 4, 2], "uv": [118, 14]}
]
},
{
"name": "Left hand",
"parent": "Left forearm",
"pivot": [4.4, 4.3, -11.4],
"rotation": [40.03, -5.04, 0],
"cubes": [
{"origin": [3.4, 1.3, -12.4], "size": [2, 3, 1], "uv": [120, 22]}
]
},
{
"name": "claw6",
"parent": "Left hand",
"pivot": [4.4, 2.8, -11.4],
"rotation": [15.29, -2.61, -23.48],
"cubes": [
{"origin": [3.9, -0.2, -12.7], "size": [1, 2, 1], "uv": [9, 0]}
]
},
{
"name": "claw5",
"parent": "Left hand",
"pivot": [4.4, 3.3, -11.4],
"rotation": [15.29, 0, 0],
"cubes": [
{"origin": [3.9, -0.7, -12.9], "size": [1, 3, 1], "uv": [0, 9]}
]
},
{
"name": "claw4",
"parent": "Left hand",
"pivot": [4.4, 2.8, -11.4],
"rotation": [15.2, 2.44, 23.03],
"cubes": [
{"origin": [3.9, -0.2, -12.6], "size": [1, 2, 1], "uv": [9, 0]}
]
},
{
"name": "Right arm",
"parent": "body2",
"pivot": [-4.4, 13.8, -10.4],
"rotation": [72.02, 0, 0],
"cubes": [
{"origin": [-5.4, 7.8, -10.4], "size": [2, 6, 2], "uv": [107, 3]}
]
},
{
"name": "Right forearm",
"parent": "Right arm",
"pivot": [-4.4, 7.8, -9.9],
"rotation": [-104.11, 0, 0],
"cubes": [
{"origin": [-5.39, 3.8, -11.9], "size": [2, 4, 2], "uv": [107, 14]}
]
},
{
"name": "Right hand",
"parent": "Right forearm",
"pivot": [-4.4, 4.3, -11.4],
"rotation": [40.03, 5.04, 0],
"cubes": [
{"origin": [-5.4, 1.3, -12.4], "size": [2, 3, 1], "uv": [112, 22]}
]
},
{
"name": "claw3",
"parent": "Right hand",
"pivot": [-4.4, 2.8, -11.4],
"rotation": [15.2, -2.44, -23.03],
"cubes": [
{"origin": [-4.9, -0.2, -12.6], "size": [1, 2, 1], "uv": [9, 0]}
]
},
{
"name": "claw2",
"parent": "Right hand",
"pivot": [-4.4, 3.3, -11.4],
"rotation": [15.29, 0, 0],
"cubes": [
{"origin": [-4.9, -0.7, -12.9], "size": [1, 3, 1], "uv": [0, 9]}
]
},
{
"name": "claw7",
"parent": "Right hand",
"pivot": [-4.4, 2.8, -11.4],
"rotation": [15.29, 2.61, 23.48],
"cubes": [
{"origin": [-4.9, -0.2, -12.7], "size": [1, 2, 1], "uv": [9, 0], "mirror": true}
]
},
{
"name": "body4",
"parent": "body3",
"pivot": [0, 20.6, 1.9],
"rotation": [-9.83, 0, 0],
"cubes": [
{"origin": [-4, 11.6, -6], "size": [8, 9, 10], "uv": [4, 80]}
]
},
{
"name": "tail1",
"parent": "body4",
"pivot": [0, 20.6, 2.2],
"rotation": [1.78, 0, 0],
"cubes": [
{"origin": [-3, 13.6, 2.2], "size": [6, 7, 8], "uv": [0, 36]}
]
},
{
"name": "tail2",
"parent": "tail1",
"pivot": [0, 20, 8.8],
"rotation": [-1.32, 0, 0],
"cubes": [
{"origin": [-2.5, 14, 8.8], "size": [5, 6, 10], "uv": [30, 34]}
]
},
{
"name": "tail3",
"parent": "tail2",
"pivot": [0, 19.6, 17.9],
"rotation": [0.46, 0, 0],
"cubes": [
{"origin": [-2, 14.6, 17.9], "size": [4, 5, 8], "uv": [62, 36]}
]
},
{
"name": "tail4",
"parent": "tail3",
"pivot": [0, 19.6, 24.9],
"rotation": [-0.26, 0, 0],
"cubes": [
{"origin": [-1.5, 15.6, 24.9], "size": [3, 4, 9], "uv": [88, 34]}
]
},
{
"name": "tail5",
"parent": "tail4",
"pivot": [0, 19.4, 33.6],
"rotation": [-8.32, 0, 0],
"cubes": [
{"origin": [-1, 16.4, 33.6], "size": [2, 3, 9], "uv": [110, 30]}
]
},
{
"name": "tail6",
"parent": "tail5",
"pivot": [0, 19.2, 42.3],
"rotation": [-8.32, 0, 0],
"cubes": [
{"origin": [-0.5, 17.2, 42.3], "size": [1, 2, 9], "uv": [110, 44]}
]
},
{
"name": "Left thigh",
"pivot": [4, 18.8, -1.5],
"rotation": [62.49, 0, 0],
"cubes": [
{"origin": [2.5, 13.8, -9.5], "size": [4, 5, 9], "uv": [30, 53]}
]
},
{
"name": "Left shin",
"parent": "Left thigh",
"pivot": [4.5, 16.8, -9.5],
"rotation": [-36.73, 0, 0],
"cubes": [
{"origin": [3, 9.8, -9.5], "size": [3, 7, 3], "uv": [16, 22]}
]
},
{
"name": "Left upper foot",
"parent": "Left shin",
"pivot": [4.5, 9.8, -7],
"rotation": [-55.62, 0, 0],
"cubes": [
{"origin": [3.5, 3.8, -9], "size": [2, 6, 2], "uv": [40, 24]}
]
},
{
"name": "Left foot",
"parent": "Left upper foot",
"pivot": [5.5, 5.9, -6.7],
"rotation": [30, 0, 0],
"cubes": [
{"origin": [4, 3.9, -11.7], "size": [2, 2, 5], "uv": [42, 3]}
]
},
{
"name": "Left toe",
"parent": "Left foot",
"pivot": [4.5, 6, -7.8],
"rotation": [-42.57, 0, 0],
"cubes": [
{"origin": [3, 4, -10.8], "size": [1, 2, 3], "uv": [45, 14]}
]
},
{
"name": "Left toe claw 1",
"parent": "Left toe",
"pivot": [4.5, 5.9, -10.5],
"rotation": [-8.7, 0, 0],
"cubes": [
{"origin": [3, 4.9, -12.5], "size": [1, 1, 2], "uv": [8, 8]}
]
},
{
"name": "Left toe claw 2",
"parent": "Left toe claw 1",
"pivot": [4.5, 5.4, -11.7],
"rotation": [-122.2, 0, 0],
"cubes": [
{"origin": [3, 4.4, -11.7], "size": [1, 1, 2], "uv": [8, 8]}
]
},
{
"name": "Right thigh",
"pivot": [-4, 18.8, -1.5],
"rotation": [62.49, 0, 0],
"cubes": [
{"origin": [-6.5, 13.8, -9.5], "size": [4, 5, 9], "uv": [2, 53]}
]
},
{
"name": "Right shin",
"parent": "Right thigh",
"pivot": [-4.5, 16.8, -9.5],
"rotation": [-36.73, 0, 0],
"cubes": [
{"origin": [-6, 9.8, -9.5], "size": [3, 7, 3], "uv": [2, 22]}
]
},
{
"name": "Right upper foot",
"parent": "Right shin",
"pivot": [-4.5, 9.8, -7],
"rotation": [-55.62, 0, 0],
"cubes": [
{"origin": [-5.5, 3.8, -9], "size": [2, 6, 2], "uv": [30, 24]}
]
},
{
"name": "Right foot",
"parent": "Right upper foot",
"pivot": [-4.5, 5.9, -6.7],
"rotation": [30, 0, 0],
"cubes": [
{"origin": [-6, 3.9, -11.7], "size": [2, 2, 5], "uv": [25, 3]}
]
},
{
"name": "Right toe",
"parent": "Right foot",
"pivot": [-2.5, 6, -7.8],
"rotation": [-42.57, 0, 0],
"cubes": [
{"origin": [-4, 4, -10.8], "size": [1, 2, 3], "uv": [29, 14]}
]
},
{
"name": "Right toe claw 1",
"parent": "Right toe",
"pivot": [-2.5, 5.9, -10.5],
"rotation": [-8.7, 0, 0],
"cubes": [
{"origin": [-4, 4.9, -12.5], "size": [1, 1, 2], "uv": [8, 8]}
]
},
{
"name": "Right toe claw 2",
"parent": "Right toe claw 1",
"pivot": [-2.5, 5.4, -11.7],
"rotation": [-122.22, 0, 0],
"cubes": [
{"origin": [-4, 4.4, -11.7], "size": [1, 1, 2], "uv": [8, 8]}
]
}
]
}
]
}
@@ -80,6 +80,7 @@
"item.jurassicrevived.tropeognathus_spawn_egg": "Tropeognathus Spawn Egg",
"item.jurassicrevived.tupuxuara_spawn_egg": "Tupuxuara Spawn Egg",
"item.jurassicrevived.zhenyuanopterus_spawn_egg": "Zhenyuanopterus Spawn Egg",
"item.jurassicrevived.achillobator_spawn_egg": "Achillobator Spawn Egg",
"entity.jurassicrevived.apatosaurus": "Apatosaurus",
"entity.jurassicrevived.albertosaurus": "Albertosaurus",
@@ -156,6 +157,7 @@
"entity.jurassicrevived.tropeognathus": "Tropeognathus",
"entity.jurassicrevived.tupuxuara": "Tupuxuara",
"entity.jurassicrevived.zhenyuanopterus": "Zhenyuanopterus",
"entity.jurassicrevived.achillobator": "Achillobator",
"block.jurassicrevived.cat_plushie": "Cat Plushie",
"block.jurassicrevived.trash_can": "Trash Can",
@@ -302,6 +304,7 @@
"item.jurassicrevived.tupuxuara_skull_fossil": "Tupuxuara Skull Fossil",
"item.jurassicrevived.utahraptor_skull_fossil": "Utahraptor Skull Fossil",
"item.jurassicrevived.zhenyuanopterus_skull_fossil": "Zhenyuanopterus Skull Fossil",
"item.jurassicrevived.achillobator_skull_fossil": "Achillobator Skull Fossil",
"item.jurassicrevived.fresh_velociraptor_skull": "Fresh Velociraptor Skull",
"item.jurassicrevived.fresh_tyrannosaurus_rex_skull": "Fresh Tyrannosaurus Rex Skull",
@@ -376,6 +379,7 @@
"item.jurassicrevived.fresh_tupuxuara_skull": "Fresh Tupuxuara Skull",
"item.jurassicrevived.fresh_utahraptor_skull": "Fresh Utahraptor Skull",
"item.jurassicrevived.fresh_zhenyuanopterus_skull": "Fresh Zhenyuanopterus Skull",
"item.jurassicrevived.fresh_achillobator_skull": "Fresh Achillobator Skull",
"item.jurassicrevived.test_tube": "Test Tube",
"item.jurassicrevived.syringe": "Syringe",
@@ -465,6 +469,7 @@
"item.jurassicrevived.tupuxuara_tissue": "Tupuxuara Tissue",
"item.jurassicrevived.utahraptor_tissue": "Utahraptor Tissue",
"item.jurassicrevived.zhenyuanopterus_tissue": "Zhenyuanopterus Tissue",
"item.jurassicrevived.achillobator_tissue": "Achillobator Tissue",
"item.jurassicrevived.velociraptor_dna": "Velociraptor DNA",
"item.jurassicrevived.tyrannosaurus_rex_dna": "Tyrannosaurus Rex DNA",
@@ -539,6 +544,7 @@
"item.jurassicrevived.tupuxuara_dna": "Tupuxuara DNA",
"item.jurassicrevived.utahraptor_dna": "Utahraptor DNA",
"item.jurassicrevived.zhenyuanopterus_dna": "Zhenyuanopterus DNA",
"item.jurassicrevived.achillobator_dna": "Achillobator DNA",
"item.jurassicrevived.velociraptor_syringe": "Velociraptor Syringe",
"item.jurassicrevived.tyrannosaurus_rex_syringe": "Tyrannosaurus Rex Syringe",
@@ -613,6 +619,7 @@
"item.jurassicrevived.tupuxuara_syringe": "Tupuxuara Syringe",
"item.jurassicrevived.utahraptor_syringe": "Utahraptor Syringe",
"item.jurassicrevived.zhenyuanopterus_syringe": "Zhenyuanopterus Syringe",
"item.jurassicrevived.achillobator_syringe": "Achillobator Syringe",
"block.jurassicrevived.velociraptor_egg": "Velociraptor Egg",
"block.jurassicrevived.tyrannosaurus_rex_egg": "Tyrannosaurus Rex Egg",
@@ -687,6 +694,7 @@
"block.jurassicrevived.tupuxuara_egg": "Tupuxuara Egg",
"block.jurassicrevived.utahraptor_egg": "Utahraptor Egg",
"block.jurassicrevived.zhenyuanopterus_egg": "Zhenyuanopterus Egg",
"block.jurassicrevived.achillobator_egg": "Achillobator Egg",
"block.jurassicrevived.incubated_velociraptor_egg": "§aIncubated Velociraptor Egg",
"block.jurassicrevived.incubated_tyrannosaurus_rex_egg": "§aIncubated Tyrannosaurus Rex Egg",
@@ -761,6 +769,7 @@
"block.jurassicrevived.incubated_tupuxuara_egg": "§aIncubated Tupuxuara Egg",
"block.jurassicrevived.incubated_utahraptor_egg": "§aIncubated Utahraptor Egg",
"block.jurassicrevived.incubated_zhenyuanopterus_egg": "§aIncubated Zhenyuanopterus Egg",
"block.jurassicrevived.incubated_achillobator_egg": "§aIncubated Achillobator Egg",
"tooltip.jurassicrevived.gender": "Gender: %s",
"tooltip.jurassicrevived.gender.hint": "Hint: %s to change",
@@ -1033,6 +1042,10 @@
"sounds.jurassicrevived.zhenyuanopterus_call": "Zhenyuanopterus Call",
"sounds.jurassicrevived.zhenyuanopterus_hurt": "Zhenyuanopterus Hurt",
"sounds.jurassicrevived.zhenyuanopterus_death": "Zhenyuanopterus Death",
"sounds.jurassicrevived.achillobator_call": "Achillobator Call",
"sounds.jurassicrevived.achillobator_attack": "Achillobator Attack",
"sounds.jurassicrevived.achillobator_hurt": "Achillobator Hurt",
"sounds.jurassicrevived.achillobator_death": "Achillobator Death",
"jurassicrevived.tooltip.liquid.amount.with.capacity": "%s / %s mB",
"jurassicrevived.tooltip.liquid.amount": "%s mB",
@@ -1756,5 +1756,41 @@
"sounds": [
"jurassicrevived:zhenyuanopterus/zhenyuanopterus_death"
]
},
"achillobator_call": {
"subtitle": "sounds.jurassicrevived.achillobator_call",
"sounds": [
"jurassicrevived:achillobator/achillobator_living_1",
"jurassicrevived:achillobator/achillobator_living_2",
"jurassicrevived:achillobator/achillobator_living_3",
"jurassicrevived:achillobator/achillobator_living_4",
"jurassicrevived:achillobator/achillobator_living_5",
"jurassicrevived:achillobator/achillobator_living_6",
"jurassicrevived:achillobator/achillobator_living_7",
"jurassicrevived:achillobator/achillobator_bark_1",
"jurassicrevived:achillobator/achillobator_bark_2",
"jurassicrevived:achillobator/achillobator_bark_3"
]
},
"achillobator_attack": {
"subtitle": "sounds.jurassicrevived.achillobator_call",
"sounds": [
"jurassicrevived:achillobator/achillobator_attack_1",
"jurassicrevived:achillobator/achillobator_attack_2",
"jurassicrevived:achillobator/achillobator_attack_3"
]
},
"achillobator_hurt": {
"subtitle": "sounds.jurassicrevived.achillobator_hurt",
"sounds": [
"jurassicrevived:achillobator/achillobator_hurt_1",
"jurassicrevived:achillobator/achillobator_hurt_2"
]
},
"achillobator_death": {
"subtitle": "sounds.jurassicrevived.achillobator_death",
"sounds": [
"jurassicrevived:achillobator/achillobator_death_1"
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 807 B

+1 -1
View File
@@ -10,7 +10,7 @@ fabric.loom.multiProjectOptimisation=true
mod.name=Jurassic Revived
mod.id=jurassicrevived
mod.group=net.cmr.jurassicrevived
mod.version=0.206.0
mod.version=0.207.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