add achillobator (untweaked)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user