Merge pull request #28 from classic-mods-revived/achillobator
achillobator
@@ -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);
|
||||
// 30s–60s 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.20–0.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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 403 B |
|
After Width: | Height: | Size: 428 B |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 456 B |
|
After Width: | Height: | Size: 740 B |
|
After Width: | Height: | Size: 578 B |
|
After Width: | Height: | Size: 440 B |
|
After Width: | Height: | Size: 807 B |
@@ -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
|
||||
|
||||