diff --git a/src/main/java/fathertoast/specialmobs/client/ClientRegister.java b/src/main/java/fathertoast/specialmobs/client/ClientRegister.java index daaffa9..605cbfa 100644 --- a/src/main/java/fathertoast/specialmobs/client/ClientRegister.java +++ b/src/main/java/fathertoast/specialmobs/client/ClientRegister.java @@ -40,22 +40,18 @@ public class ClientRegister { registerFamilyRenderers( MobFamily.ENDERMAN, SpecialEndermanRenderer::new ); //registerFamilyRenderers( MobFamily.WITCH, SpecialWitchRenderer::new ); - // Custom renderers - registerRenderer( NinjaSkeletonEntity.class, NinjaSkeletonRenderer::new ); - registerRenderer( NinjaWitherSkeletonEntity.class, NinjaSkeletonRenderer::new ); + // Species overrides + registerSpeciesRenderer( NinjaSkeletonEntity.SPECIES, NinjaSkeletonRenderer::new ); + registerSpeciesRenderer( NinjaWitherSkeletonEntity.SPECIES, NinjaSkeletonRenderer::new ); } private static void registerFamilyRenderers( MobFamily family, IRenderFactory renderFactory ) { RenderingRegistry.registerEntityRenderingHandler( family.vanillaReplacement.entityType.get(), renderFactory ); for( MobFamily.Species species : family.variants ) - RenderingRegistry.registerEntityRenderingHandler( species.entityType.get(), renderFactory ); + registerSpeciesRenderer( species, renderFactory ); } - private static void registerRenderer( Class entityClass, IRenderFactory renderFactory ) { - MobFamily.Species species = MobFamily.findSpecies( entityClass ); - - if( species == null ) - throw new IllegalArgumentException( "Could not register renderer for entity class '" + entityClass.getSimpleName() + "', as no belonging mob species was found." ); + private static void registerSpeciesRenderer( MobFamily.Species species, IRenderFactory renderFactory ) { RenderingRegistry.registerEntityRenderingHandler( species.entityType.get(), renderFactory ); } } \ No newline at end of file diff --git a/src/main/java/fathertoast/specialmobs/common/bestiary/MobFamily.java b/src/main/java/fathertoast/specialmobs/common/bestiary/MobFamily.java index 7f920d8..7d6e094 100644 --- a/src/main/java/fathertoast/specialmobs/common/bestiary/MobFamily.java +++ b/src/main/java/fathertoast/specialmobs/common/bestiary/MobFamily.java @@ -2,12 +2,10 @@ package fathertoast.specialmobs.common.bestiary; import fathertoast.specialmobs.common.core.register.SMEntities; import fathertoast.specialmobs.common.core.register.SMItems; -import fathertoast.specialmobs.common.entity.ISpecialMob; import fathertoast.specialmobs.common.util.AnnotationHelper; import fathertoast.specialmobs.common.util.References; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.block.Block; -import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.monster.*; @@ -132,16 +130,6 @@ public class MobFamily { /** @return A list of all species. */ public static List> getAllSpecies() { return SPECIES_LIST; } - @SuppressWarnings( "unchecked" ) - @Nullable - public static Species findSpecies( Class entityClass ) { - for( Species species : getAllSpecies() ) { - if( species.entityClass == entityClass ) - return (Species) species; - } - return null; - } - /** @return The family of mobs that can replace the passed entity; returns null if the entity is not replaceable. */ @Nullable public static MobFamily getReplacementFamily( LivingEntity entity ) { @@ -250,9 +238,6 @@ public class MobFamily { /** This species's spawn egg item, wrapped in its registry object. */ public final RegistryObject spawnEgg; - /** Whether this species has a custom renderer. */ - public final boolean hasCustomRenderer; - /** Constructs a new mob species. For vanilla replacements, the variant name is null. */ private Species( MobFamily parentFamily, String packageRoot, @Nullable String variantName ) { final boolean vanillaReplacement = variantName == null; @@ -272,8 +257,9 @@ public class MobFamily { // Initialize deferred registry objects entityType = SMEntities.register( name.toLowerCase( Locale.ROOT ), entityTypeBuilder ); spawnEgg = SMItems.registerSpawnEgg( entityType, parentFamily.eggBaseColor, bestiaryInfo.eggSpotsColor ); - hasCustomRenderer = AnnotationHelper.hasCustomRenderer( entityClass ); - AnnotationHelper.injectEntityTypeHolder( this ); + + // Register this species with the entity class + AnnotationHelper.injectSpeciesReference( this ); } /** Finds the entity class based on a standard format. */ diff --git a/src/main/java/fathertoast/specialmobs/common/bestiary/SpecialMob.java b/src/main/java/fathertoast/specialmobs/common/bestiary/SpecialMob.java index 74868bf..c1ac68c 100644 --- a/src/main/java/fathertoast/specialmobs/common/bestiary/SpecialMob.java +++ b/src/main/java/fathertoast/specialmobs/common/bestiary/SpecialMob.java @@ -16,15 +16,15 @@ import java.lang.annotation.Target; public @interface SpecialMob { /** - * OPTIONAL. This is injected with the species's entity type during registration so you may access it later, as needed. + * REQUIRED. This is injected with a reference to the species during registration so you may access it later, as needed. *

* The annotated field must have a signature that follows the pattern: *

- * public static RegistryObject> FIELD_NAME; + * public static MobFamily.Species FIELD_NAME; */ @Retention( RetentionPolicy.RUNTIME ) @Target( ElementType.FIELD ) - @interface TypeHolder { } + @interface SpeciesReference { } /** * REQUIRED. This is grabbed during registration to be used as a mob 'factory'; the needed constructor will probably @@ -36,13 +36,12 @@ public @interface SpecialMob { */ @Retention( RetentionPolicy.RUNTIME ) @Target( ElementType.CONSTRUCTOR ) - @interface Constructor { - boolean hasCustomRenderer() default false; - } + @interface Constructor { } /** * REQUIRED. This is called during registration to collect static properties of the mob needed for the bestiary * and for building the species's entity type. + * This is not 'overridable' because all species must have unique info in the bestiary. *

* The annotated method must have a signature that follows the pattern: *

@@ -57,7 +56,9 @@ public @interface SpecialMob { @interface BestiaryInfoSupplier { } /** - * REQUIRED. This is called during registration to build the base attributes for the species. + * OVERRIDABLE. This is called during registration to build the base attributes for the species. + * 'Overridable' static methods inherit from their superclass if not defined in a subclass, but must be defined somewhere. + * This is 'overridable' because not all species need to have different attributes from their parent vanilla mob. *

* The annotated method must have a signature that follows the pattern: *

@@ -72,6 +73,7 @@ public @interface SpecialMob { /** * REQUIRED. This is called during data generation to build the mod's default lang files. + * This is not 'overridable' because all species must have unique names. *

* The annotated method must have a signature that follows the pattern: *

@@ -89,6 +91,7 @@ public @interface SpecialMob { /** * REQUIRED. This is called during data generation to build the mob's default loot table. Special variants will * typically start this method by calling their vanilla replacement's implementation of this method. + * This is not 'overridable' because all species must have unique default loot tables. *

* The annotated method must have a signature that follows the pattern: *

diff --git a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/BabyCaveSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/BabyCaveSpiderEntity.java index e0a540e..94183aa 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/BabyCaveSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/BabyCaveSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.cavespider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -12,7 +13,6 @@ import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.item.Items; import net.minecraft.world.World; -import net.minecraftforge.fml.RegistryObject; import javax.annotation.ParametersAreNonnullByDefault; @@ -23,8 +23,8 @@ public class BabyCaveSpiderEntity extends _SpecialCaveSpiderEntity { //--------------- Static Special Mob Hooks ---------------- - @SpecialMob.TypeHolder - public static RegistryObject> ENTITY_TYPE; + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { diff --git a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/FlyingCaveSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/FlyingCaveSpiderEntity.java index 814ee86..cdc6c5e 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/FlyingCaveSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/FlyingCaveSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.cavespider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.ai.SpecialLeapAtTargetGoal; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -24,6 +25,9 @@ public class FlyingCaveSpiderEntity extends _SpecialCaveSpiderEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x6388B2 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/MotherCaveSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/MotherCaveSpiderEntity.java index af7b9f1..89e6b3d 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/MotherCaveSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/MotherCaveSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.cavespider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -12,13 +13,11 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.SpawnReason; import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; -import net.minecraft.entity.monster.SlimeEntity; import net.minecraft.item.Items; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.DamageSource; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvents; -import net.minecraft.util.text.ITextComponent; import net.minecraft.world.IServerWorld; import net.minecraft.world.World; @@ -32,6 +31,9 @@ public class MotherCaveSpiderEntity extends _SpecialCaveSpiderEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.9F, 0.6F ); @@ -118,7 +120,7 @@ public class MotherCaveSpiderEntity extends _SpecialCaveSpiderEntity { /** Helper method to simplify spawning babies. */ @Nullable private ILivingEntityData spawnBaby( float speed, @Nullable ILivingEntityData groupData ) { - final BabyCaveSpiderEntity baby = BabyCaveSpiderEntity.ENTITY_TYPE.get().create( level ); + final BabyCaveSpiderEntity baby = BabyCaveSpiderEntity.SPECIES.entityType.get().create( level ); if( baby == null ) return groupData; baby.copyPosition( this ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/WebCaveSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/WebCaveSpiderEntity.java index 5459469..bc8503e 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/WebCaveSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/WebCaveSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.cavespider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -28,6 +29,9 @@ public class WebCaveSpiderEntity extends _SpecialCaveSpiderEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xE7E7E7, BestiaryInfo.BaseWeight.LOW ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/WitchCaveSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/WitchCaveSpiderEntity.java index 9ee463e..f8bfdcb 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/WitchCaveSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/WitchCaveSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.cavespider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -26,6 +27,9 @@ public class WitchCaveSpiderEntity extends _SpecialCaveSpiderEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xDD0E0E, BestiaryInfo.BaseWeight.LOW ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/_SpecialCaveSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/_SpecialCaveSpiderEntity.java index 14cbf3c..10003ac 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/_SpecialCaveSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/_SpecialCaveSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.cavespider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.core.SpecialMobs; import fathertoast.specialmobs.common.entity.ISpecialMob; @@ -36,6 +37,9 @@ public class _SpecialCaveSpiderEntity extends CaveSpiderEntity implements ISpeci //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species<_SpecialCaveSpiderEntity> SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xA80E0E ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/creeper/DarkCreeperEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/creeper/DarkCreeperEntity.java index 69ae78b..86b25db 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/creeper/DarkCreeperEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/creeper/DarkCreeperEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.creeper; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.ExplosionHelper; import fathertoast.specialmobs.common.util.References; @@ -10,7 +11,6 @@ import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.potion.EffectInstance; @@ -32,16 +32,14 @@ public class DarkCreeperEntity extends _SpecialCreeperEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xF9FF3A ); } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialCreeperEntity.createAttributes(); - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Dark Creeper", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/creeper/DeathCreeperEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/creeper/DeathCreeperEntity.java index 722ce7b..52d8046 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/creeper/DeathCreeperEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/creeper/DeathCreeperEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.creeper; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -24,6 +25,9 @@ public class DeathCreeperEntity extends _SpecialCreeperEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.9F, 2.6F ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/creeper/DirtCreeperEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/creeper/DirtCreeperEntity.java index 821d56f..3353ee6 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/creeper/DirtCreeperEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/creeper/DirtCreeperEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.creeper; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.ExplosionHelper; @@ -28,6 +29,9 @@ public class DirtCreeperEntity extends _SpecialCreeperEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x78553B ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/creeper/DoomCreeperEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/creeper/DoomCreeperEntity.java index 4b4748b..b585e7d 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/creeper/DoomCreeperEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/creeper/DoomCreeperEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.creeper; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.ExplosionHelper; import fathertoast.specialmobs.common.util.References; @@ -9,7 +10,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.AreaEffectCloudEntity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.potion.EffectInstance; import net.minecraft.potion.Effects; import net.minecraft.util.ResourceLocation; @@ -25,17 +25,15 @@ public class DoomCreeperEntity extends _SpecialCreeperEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x494949 ); //TODO theme - forest } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialCreeperEntity.createAttributes(); - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Doom Creeper", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/creeper/DrowningCreeperEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/creeper/DrowningCreeperEntity.java index db8f22d..86e6d47 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/creeper/DrowningCreeperEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/creeper/DrowningCreeperEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.creeper; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.ExplosionHelper; @@ -19,13 +20,11 @@ import net.minecraft.entity.passive.fish.PufferfishEntity; import net.minecraft.item.Items; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tags.BlockTags; -import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.Explosion; import net.minecraft.world.IServerWorld; import net.minecraft.world.World; -import net.minecraft.world.spawner.WorldEntitySpawner; import javax.annotation.ParametersAreNonnullByDefault; @@ -36,6 +35,9 @@ public class DrowningCreeperEntity extends _SpecialCreeperEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x2D41F4, BestiaryInfo.BaseWeight.LOW ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/creeper/EnderCreeperEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/creeper/EnderCreeperEntity.java index 0a53e71..6f5d5f3 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/creeper/EnderCreeperEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/creeper/EnderCreeperEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.creeper; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.core.SpecialMobs; import fathertoast.specialmobs.common.entity.ai.AIHelper; @@ -44,6 +45,9 @@ public class EnderCreeperEntity extends _SpecialCreeperEntity implements IAngera //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xCC00FA, BestiaryInfo.BaseWeight.LOW ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/creeper/FireCreeperEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/creeper/FireCreeperEntity.java index 17601cb..1d2616f 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/creeper/FireCreeperEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/creeper/FireCreeperEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.creeper; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.ExplosionHelper; import fathertoast.specialmobs.common.util.References; @@ -8,7 +9,6 @@ import fathertoast.specialmobs.datagen.loot.LootTableBuilder; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.item.Items; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; @@ -22,6 +22,9 @@ public class FireCreeperEntity extends _SpecialCreeperEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.fireImmune(); @@ -29,11 +32,6 @@ public class FireCreeperEntity extends _SpecialCreeperEntity { //TODO theme - fire } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialCreeperEntity.createAttributes(); - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Fire Creeper", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/creeper/GravelCreeperEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/creeper/GravelCreeperEntity.java index cb01b26..282c9fc 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/creeper/GravelCreeperEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/creeper/GravelCreeperEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.creeper; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.ExplosionHelper; import fathertoast.specialmobs.common.util.References; @@ -9,7 +10,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.block.Blocks; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.item.FallingBlockEntity; import net.minecraft.item.Items; import net.minecraft.util.DamageSource; @@ -27,16 +27,14 @@ public class GravelCreeperEntity extends _SpecialCreeperEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x908884 ); } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialCreeperEntity.createAttributes(); - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Gravel Creeper", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/creeper/JumpingCreeperEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/creeper/JumpingCreeperEntity.java index bd8865d..83341a4 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/creeper/JumpingCreeperEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/creeper/JumpingCreeperEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.creeper; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.ai.AIHelper; import fathertoast.specialmobs.common.entity.ai.SpecialLeapAtTargetGoal; @@ -25,6 +26,9 @@ public class JumpingCreeperEntity extends _SpecialCreeperEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x7D6097 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/creeper/LightningCreeperEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/creeper/LightningCreeperEntity.java index 969c1c4..c6766dd 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/creeper/LightningCreeperEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/creeper/LightningCreeperEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.creeper; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.ExplosionHelper; import fathertoast.specialmobs.common.util.References; @@ -8,7 +9,6 @@ import fathertoast.specialmobs.datagen.loot.LootTableBuilder; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.item.Items; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; @@ -23,17 +23,15 @@ public class LightningCreeperEntity extends _SpecialCreeperEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.fireImmune(); return new BestiaryInfo( 0x499CAE ); } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialCreeperEntity.createAttributes(); - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Lightning Creeper", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/creeper/MiniCreeperEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/creeper/MiniCreeperEntity.java index 04c4c54..0b1d307 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/creeper/MiniCreeperEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/creeper/MiniCreeperEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.creeper; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -11,7 +12,6 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.world.World; -import net.minecraftforge.fml.RegistryObject; import javax.annotation.ParametersAreNonnullByDefault; @@ -22,8 +22,8 @@ public class MiniCreeperEntity extends _SpecialCreeperEntity { //--------------- Static Special Mob Hooks ---------------- - @SpecialMob.TypeHolder - public static RegistryObject> ENTITY_TYPE; + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { diff --git a/src/main/java/fathertoast/specialmobs/common/entity/creeper/SplittingCreeperEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/creeper/SplittingCreeperEntity.java index f11a5cf..189e489 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/creeper/SplittingCreeperEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/creeper/SplittingCreeperEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.creeper; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.ExplosionHelper; @@ -30,6 +31,9 @@ public class SplittingCreeperEntity extends _SpecialCreeperEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.7F, 1.99F ); @@ -89,7 +93,7 @@ public class SplittingCreeperEntity extends _SpecialCreeperEntity { /** Helper method to simplify spawning babies. */ @Nullable private ILivingEntityData spawnBaby( float speed, @Nullable ILivingEntityData groupData ) { - final MiniCreeperEntity baby = MiniCreeperEntity.ENTITY_TYPE.get().create( level ); + final MiniCreeperEntity baby = MiniCreeperEntity.SPECIES.entityType.get().create( level ); if( baby == null ) return groupData; baby.copyPosition( this ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/creeper/_SpecialCreeperEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/creeper/_SpecialCreeperEntity.java index 06a4bd8..b2d65e3 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/creeper/_SpecialCreeperEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/creeper/_SpecialCreeperEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.creeper; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.core.SpecialMobs; import fathertoast.specialmobs.common.entity.ISpecialMob; @@ -42,6 +43,9 @@ public class _SpecialCreeperEntity extends CreeperEntity implements ISpecialMob< //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species<_SpecialCreeperEntity> SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x000000 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/enderman/BlindingEndermanEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/enderman/BlindingEndermanEntity.java index 63498e6..4948027 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/enderman/BlindingEndermanEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/enderman/BlindingEndermanEntity.java @@ -1,13 +1,13 @@ package fathertoast.specialmobs.common.entity.enderman; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.References; import fathertoast.specialmobs.datagen.loot.LootTableBuilder; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.item.Items; import net.minecraft.potion.EffectInstance; import net.minecraft.potion.Effects; @@ -23,17 +23,15 @@ public class BlindingEndermanEntity extends _SpecialEndermanEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xFFFFFF ); //TODO theme - forest } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialEndermanEntity.createAttributes(); - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Blinding Enderman", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/enderman/IcyEndermanEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/enderman/IcyEndermanEntity.java index 3b602a6..d628c8a 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/enderman/IcyEndermanEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/enderman/IcyEndermanEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.enderman; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.entity.ai.AIHelper; @@ -14,7 +15,6 @@ import net.minecraft.enchantment.FrostWalkerEnchantment; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.fluid.Fluid; import net.minecraft.item.Items; import net.minecraft.nbt.CompoundNBT; @@ -41,17 +41,15 @@ public class IcyEndermanEntity extends _SpecialEndermanEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x72959C ); //TODO theme - ice } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialEndermanEntity.createAttributes(); - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Icy Enderman", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/enderman/LightningEndermanEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/enderman/LightningEndermanEntity.java index c87d186..b17f684 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/enderman/LightningEndermanEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/enderman/LightningEndermanEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.enderman; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.ExplosionHelper; import fathertoast.specialmobs.common.util.References; @@ -9,7 +10,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.effect.LightningBoltEntity; import net.minecraft.item.Items; import net.minecraft.util.ResourceLocation; @@ -25,17 +25,15 @@ public class LightningEndermanEntity extends _SpecialEndermanEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.fireImmune(); return new BestiaryInfo( 0x4BB4B5 ); } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialEndermanEntity.createAttributes(); - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Lightning Enderman", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/enderman/MiniEndermanEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/enderman/MiniEndermanEntity.java index a7f8e36..6dcf209 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/enderman/MiniEndermanEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/enderman/MiniEndermanEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.enderman; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -21,6 +22,9 @@ public class MiniEndermanEntity extends _SpecialEndermanEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.5F, 0.99F ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/enderman/MirageEndermanEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/enderman/MirageEndermanEntity.java index 2205f2e..f1ab276 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/enderman/MirageEndermanEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/enderman/MirageEndermanEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.enderman; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -16,7 +17,6 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.DamageSource; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; -import net.minecraftforge.fml.RegistryObject; import javax.annotation.ParametersAreNonnullByDefault; @@ -27,8 +27,8 @@ public class MirageEndermanEntity extends _SpecialEndermanEntity { //--------------- Static Special Mob Hooks ---------------- - @SpecialMob.TypeHolder - public static RegistryObject> ENTITY_TYPE; + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { @@ -122,7 +122,7 @@ public class MirageEndermanEntity extends _SpecialEndermanEntity { private void mirage( double xI, double yI, double zI ) { if( !isFake && getTarget() != null ) { - final MirageEndermanEntity mirage = ENTITY_TYPE.get().create( level ); + final MirageEndermanEntity mirage = SPECIES.entityType.get().create( level ); if( mirage == null ) return; mirage.setFake(); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/enderman/ThiefEndermanEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/enderman/ThiefEndermanEntity.java index 762e5ea..5ba4d88 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/enderman/ThiefEndermanEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/enderman/ThiefEndermanEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.enderman; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -28,6 +29,9 @@ public class ThiefEndermanEntity extends _SpecialEndermanEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x04FA00, BestiaryInfo.BaseWeight.LOW ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/enderman/_SpecialEndermanEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/enderman/_SpecialEndermanEntity.java index 907b498..a99b6ce 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/enderman/_SpecialEndermanEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/enderman/_SpecialEndermanEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.enderman; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.core.SpecialMobs; import fathertoast.specialmobs.common.entity.ISpecialMob; @@ -34,6 +35,9 @@ public class _SpecialEndermanEntity extends EndermanEntity implements ISpecialMo //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species<_SpecialEndermanEntity> SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x000000 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/magmacube/BouncingMagmaCubeEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/magmacube/BouncingMagmaCubeEntity.java index d7bd2ec..71b7f5c 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/magmacube/BouncingMagmaCubeEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/magmacube/BouncingMagmaCubeEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.magmacube; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.entity.ai.AIHelper; @@ -11,7 +12,6 @@ import fathertoast.specialmobs.datagen.loot.LootTableBuilder; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.fluid.Fluid; import net.minecraft.item.Items; @@ -31,6 +31,9 @@ public class BouncingMagmaCubeEntity extends _SpecialMagmaCubeEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.fireImmune(); @@ -38,11 +41,6 @@ public class BouncingMagmaCubeEntity extends _SpecialMagmaCubeEntity { //TODO theme - mountain } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialMagmaCubeEntity.createAttributes(); // Slimes define their attributes elsewhere based on size - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Bouncing Magma Cube", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/magmacube/HardenedMagmaCubeEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/magmacube/HardenedMagmaCubeEntity.java index 9c2315d..1675781 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/magmacube/HardenedMagmaCubeEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/magmacube/HardenedMagmaCubeEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.magmacube; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.ai.SpecialLeapAtTargetGoal; import fathertoast.specialmobs.common.util.References; @@ -10,7 +11,6 @@ import net.minecraft.block.Blocks; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.vector.Vector3d; @@ -25,17 +25,15 @@ public class HardenedMagmaCubeEntity extends _SpecialMagmaCubeEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 3.06F, 3.06F ); return new BestiaryInfo( 0xDF7679, BestiaryInfo.BaseWeight.LOW ); } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialMagmaCubeEntity.createAttributes(); // Slimes define their attributes elsewhere based on size - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Hardened Magma Cube", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/magmacube/StickyMagmaCubeEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/magmacube/StickyMagmaCubeEntity.java index 66755c2..96d093b 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/magmacube/StickyMagmaCubeEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/magmacube/StickyMagmaCubeEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.magmacube; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.References; import fathertoast.specialmobs.datagen.loot.LootTableBuilder; @@ -8,7 +9,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.item.Items; import net.minecraft.util.DamageSource; @@ -25,16 +25,14 @@ public class StickyMagmaCubeEntity extends _SpecialMagmaCubeEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x9D733F ); } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialMagmaCubeEntity.createAttributes(); // Slimes define their attributes elsewhere based on size - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Sticky Magma Cube", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/magmacube/VolatileMagmaCubeEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/magmacube/VolatileMagmaCubeEntity.java index 0c07e34..2d1ba24 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/magmacube/VolatileMagmaCubeEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/magmacube/VolatileMagmaCubeEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.magmacube; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.ExplosionHelper; import fathertoast.specialmobs.common.util.References; @@ -9,7 +10,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.AreaEffectCloudEntity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.entity.ai.goal.Goal; import net.minecraft.entity.player.PlayerEntity; @@ -37,16 +37,14 @@ public class VolatileMagmaCubeEntity extends _SpecialMagmaCubeEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x331133 ); } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialMagmaCubeEntity.createAttributes(); // Slimes define their attributes elsewhere based on size - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Volatile Magma Cube", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/magmacube/_SpecialMagmaCubeEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/magmacube/_SpecialMagmaCubeEntity.java index c9b3af3..5a713ac 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/magmacube/_SpecialMagmaCubeEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/magmacube/_SpecialMagmaCubeEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.magmacube; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.core.SpecialMobs; import fathertoast.specialmobs.common.entity.ISpecialMob; @@ -36,6 +37,9 @@ public class _SpecialMagmaCubeEntity extends MagmaCubeEntity implements ISpecial //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species<_SpecialMagmaCubeEntity> SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xFCFC00 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/silverfish/BlindingSilverfishEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/silverfish/BlindingSilverfishEntity.java index 045cf85..d8c75b6 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/silverfish/BlindingSilverfishEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/silverfish/BlindingSilverfishEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.silverfish; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.References; @@ -9,7 +10,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.item.Items; import net.minecraft.potion.EffectInstance; import net.minecraft.potion.Effects; @@ -25,17 +25,15 @@ public class BlindingSilverfishEntity extends _SpecialSilverfishEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x000000 ); //TODO theme - forest } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialSilverfishEntity.createAttributes(); - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Blinding Silverfish", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/silverfish/FishingSilverfishEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/silverfish/FishingSilverfishEntity.java index 8bf7f15..d17722c 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/silverfish/FishingSilverfishEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/silverfish/FishingSilverfishEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.silverfish; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.ai.IAngler; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -26,6 +27,9 @@ public class FishingSilverfishEntity extends _SpecialSilverfishEntity implements //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.5F, 0.4F ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/silverfish/FlyingSilverfishEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/silverfish/FlyingSilverfishEntity.java index 9cce749..e4fda80 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/silverfish/FlyingSilverfishEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/silverfish/FlyingSilverfishEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.silverfish; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.ai.SpecialLeapAtTargetGoal; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -24,6 +25,9 @@ public class FlyingSilverfishEntity extends _SpecialSilverfishEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x6388B2 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/silverfish/PoisonSilverfishEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/silverfish/PoisonSilverfishEntity.java index 79a22dd..6b887ae 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/silverfish/PoisonSilverfishEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/silverfish/PoisonSilverfishEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.silverfish; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.References; @@ -9,7 +10,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.item.Items; import net.minecraft.potion.EffectInstance; import net.minecraft.potion.Effects; @@ -25,17 +25,15 @@ public class PoisonSilverfishEntity extends _SpecialSilverfishEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x779C68 ); //TODO theme - forest } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialSilverfishEntity.createAttributes(); - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Venomous Silverfish", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/silverfish/ToughSilverfishEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/silverfish/ToughSilverfishEntity.java index 7c46ed6..59225a1 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/silverfish/ToughSilverfishEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/silverfish/ToughSilverfishEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.silverfish; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -23,6 +24,9 @@ public class ToughSilverfishEntity extends _SpecialSilverfishEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.6F, 0.45F ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/silverfish/_SpecialSilverfishEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/silverfish/_SpecialSilverfishEntity.java index 25cc590..027f1f8 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/silverfish/_SpecialSilverfishEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/silverfish/_SpecialSilverfishEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.silverfish; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.core.SpecialMobs; import fathertoast.specialmobs.common.entity.ISpecialMob; @@ -38,6 +39,9 @@ public class _SpecialSilverfishEntity extends SilverfishEntity implements ISpeci //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species<_SpecialSilverfishEntity> SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x303030 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/BruteSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/BruteSkeletonEntity.java index ebab200..da7e6e5 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/BruteSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/BruteSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.skeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -30,6 +31,9 @@ public class BruteSkeletonEntity extends _SpecialSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.7F, 2.4F ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/FireSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/FireSkeletonEntity.java index 4f0c7f7..10cb43d 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/FireSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/FireSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.skeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.References; import fathertoast.specialmobs.datagen.loot.LootTableBuilder; @@ -8,7 +9,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.projectile.AbstractArrowEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -24,6 +24,9 @@ public class FireSkeletonEntity extends _SpecialSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.fireImmune(); @@ -31,11 +34,6 @@ public class FireSkeletonEntity extends _SpecialSkeletonEntity { //TODO theme - fire } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialSkeletonEntity.createAttributes(); - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Fire Skeleton", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/GatlingSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/GatlingSkeletonEntity.java index 5333417..a114828 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/GatlingSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/GatlingSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.skeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -23,6 +24,9 @@ public class GatlingSkeletonEntity extends _SpecialSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xFFFF0B ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/GiantSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/GiantSkeletonEntity.java index 6c1a980..5379c80 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/GiantSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/GiantSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.skeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -22,6 +23,9 @@ public class GiantSkeletonEntity extends _SpecialSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.9F, 2.99F ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/KnightSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/KnightSkeletonEntity.java index 7868b86..efb8250 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/KnightSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/KnightSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.skeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -25,6 +26,9 @@ public class KnightSkeletonEntity extends _SpecialSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xDDDDDD ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/NinjaSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/NinjaSkeletonEntity.java index 08d960a..385d563 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/NinjaSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/NinjaSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.skeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.ai.INinja; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -36,6 +37,9 @@ public class NinjaSkeletonEntity extends _SpecialSkeletonEntity implements INinj //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x333366 ); @@ -61,7 +65,7 @@ public class NinjaSkeletonEntity extends _SpecialSkeletonEntity implements INinj Blocks.INFESTED_CRACKED_STONE_BRICKS, Blocks.INFESTED_MOSSY_STONE_BRICKS, Blocks.INFESTED_CHISELED_STONE_BRICKS ); } - @SpecialMob.Constructor(hasCustomRenderer = true) + @SpecialMob.Constructor public NinjaSkeletonEntity( EntityType entityType, World world ) { super( entityType, world ); xpReward += 2; @@ -120,8 +124,8 @@ public class NinjaSkeletonEntity extends _SpecialSkeletonEntity implements INinj if( !level.isClientSide() ) { if( canHide ) { //EntityAINinja.startHiding( this ); TODO - this.setHiding(true); - this.setDisguiseBlock(Blocks.DIRT.defaultBlockState()); + this.setHiding( true ); + this.setDisguiseBlock( Blocks.DIRT.defaultBlockState() ); } else if( onGround && getDisguiseBlock() == null && (getTarget() == null || getTarget() instanceof PlayerEntity && ((PlayerEntity) getTarget()).isCreative()) ) { @@ -141,7 +145,7 @@ public class NinjaSkeletonEntity extends _SpecialSkeletonEntity implements INinj // super.move( type, x, y, z ); // } // } - + /** Returns true if this entity should push and be pushed by other entities when colliding. */ @Override public boolean isPushable() { diff --git a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/PoisonSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/PoisonSkeletonEntity.java index 52d52c5..5201ad4 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/PoisonSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/PoisonSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.skeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.References; @@ -9,7 +10,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.projectile.AbstractArrowEntity; import net.minecraft.entity.projectile.ArrowEntity; import net.minecraft.item.ItemStack; @@ -30,17 +30,15 @@ public class PoisonSkeletonEntity extends _SpecialSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x779C68 ); //TODO theme - forest } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialSkeletonEntity.createAttributes(); - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Poison Skeleton", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/SniperSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/SniperSkeletonEntity.java index f79e8e0..603454e 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/SniperSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/SniperSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.skeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -23,6 +24,9 @@ public class SniperSkeletonEntity extends _SpecialSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x486720 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/SpitfireSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/SpitfireSkeletonEntity.java index 2270ed1..7ea8c6e 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/SpitfireSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/SpitfireSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.skeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -24,6 +25,9 @@ public class SpitfireSkeletonEntity extends _SpecialSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.9F, 2.99F ).fireImmune(); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/StraySkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/StraySkeletonEntity.java index 97fe6d6..ada7b85 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/StraySkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/StraySkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.skeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.References; @@ -31,6 +32,9 @@ public class StraySkeletonEntity extends _SpecialSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xDDEAEA, BestiaryInfo.BaseWeight.LOW ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/_SpecialSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/_SpecialSkeletonEntity.java index fe7667d..6a410a1 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/_SpecialSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/_SpecialSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.skeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.core.SpecialMobs; import fathertoast.specialmobs.common.entity.ISpecialMob; @@ -55,6 +56,9 @@ public class _SpecialSkeletonEntity extends AbstractSkeletonEntity implements IS //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species<_SpecialSkeletonEntity> SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x494949 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/slime/BlackberrySlimeEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/slime/BlackberrySlimeEntity.java index bd5263e..26e420c 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/slime/BlackberrySlimeEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/slime/BlackberrySlimeEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.slime; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.ExplosionHelper; import fathertoast.specialmobs.common.util.References; @@ -9,7 +10,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.AreaEffectCloudEntity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.entity.ai.goal.Goal; import net.minecraft.entity.player.PlayerEntity; @@ -37,16 +37,14 @@ public class BlackberrySlimeEntity extends _SpecialSlimeEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x331133 ); } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialSlimeEntity.createAttributes(); // Slimes define their attributes elsewhere based on size - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Blackberry Slime", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/slime/BlueberrySlimeEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/slime/BlueberrySlimeEntity.java index 5ff9537..151087c 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/slime/BlueberrySlimeEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/slime/BlueberrySlimeEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.slime; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.entity.ai.AIHelper; @@ -10,7 +11,6 @@ import fathertoast.specialmobs.datagen.loot.LootTableBuilder; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.fluid.Fluid; import net.minecraft.item.Items; @@ -32,17 +32,15 @@ public class BlueberrySlimeEntity extends _SpecialSlimeEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x766BBC ); //TODO theme - water } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialSlimeEntity.createAttributes(); // Slimes define their attributes elsewhere based on size - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Blueberry Slime", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/slime/CaramelSlimeEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/slime/CaramelSlimeEntity.java index 3617c81..80b7b10 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/slime/CaramelSlimeEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/slime/CaramelSlimeEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.slime; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.References; import fathertoast.specialmobs.datagen.loot.LootTableBuilder; @@ -8,7 +9,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.item.Items; import net.minecraft.particles.IParticleData; @@ -28,16 +28,14 @@ public class CaramelSlimeEntity extends _SpecialSlimeEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x9D733F ); } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialSlimeEntity.createAttributes(); // Slimes define their attributes elsewhere based on size - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Caramel Slime", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/slime/GrapeSlimeEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/slime/GrapeSlimeEntity.java index 5a6eacf..3fa27e4 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/slime/GrapeSlimeEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/slime/GrapeSlimeEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.slime; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.ai.SpecialLeapAtTargetGoal; import fathertoast.specialmobs.common.util.References; @@ -8,7 +9,6 @@ import fathertoast.specialmobs.datagen.loot.LootTableBuilder; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.item.Items; import net.minecraft.particles.IParticleData; @@ -26,17 +26,15 @@ public class GrapeSlimeEntity extends _SpecialSlimeEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xB333B3 ); //TODO theme - mountain } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialSlimeEntity.createAttributes(); // Slimes define their attributes elsewhere based on size - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Grape Slime", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/slime/LemonSlimeEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/slime/LemonSlimeEntity.java index 3f1b856..7e021d3 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/slime/LemonSlimeEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/slime/LemonSlimeEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.slime; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.ExplosionHelper; import fathertoast.specialmobs.common.util.References; @@ -9,7 +10,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.entity.effect.LightningBoltEntity; import net.minecraft.item.Items; @@ -30,17 +30,15 @@ public class LemonSlimeEntity extends _SpecialSlimeEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.fireImmune(); return new BestiaryInfo( 0xE6E861 ); } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialSlimeEntity.createAttributes(); // Slimes define their attributes elsewhere based on size - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Lemon Slime", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/slime/StrawberrySlimeEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/slime/StrawberrySlimeEntity.java index 4fffc37..ecc4b9b 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/slime/StrawberrySlimeEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/slime/StrawberrySlimeEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.slime; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.entity.ai.AIHelper; @@ -11,7 +12,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.fluid.Fluid; import net.minecraft.item.Items; import net.minecraft.nbt.CompoundNBT; @@ -32,6 +32,9 @@ public class StrawberrySlimeEntity extends _SpecialSlimeEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.fireImmune(); @@ -39,11 +42,6 @@ public class StrawberrySlimeEntity extends _SpecialSlimeEntity { //TODO theme - fire } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialSlimeEntity.createAttributes(); // Slimes define their attributes elsewhere based on size - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Strawberry Slime", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/slime/WatermelonSlimeEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/slime/WatermelonSlimeEntity.java index ae57b60..c7cd901 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/slime/WatermelonSlimeEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/slime/WatermelonSlimeEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.slime; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.ai.SpecialLeapAtTargetGoal; import fathertoast.specialmobs.common.util.References; @@ -9,7 +10,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.item.Items; import net.minecraft.particles.IParticleData; @@ -28,17 +28,15 @@ public class WatermelonSlimeEntity extends _SpecialSlimeEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 3.06F, 3.06F ); return new BestiaryInfo( 0xDF7679, BestiaryInfo.BaseWeight.LOW ); } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialSlimeEntity.createAttributes(); // Slimes define their attributes elsewhere based on size - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Watermelon Slime", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/slime/_SpecialSlimeEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/slime/_SpecialSlimeEntity.java index 46a04f0..1d3bc30 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/slime/_SpecialSlimeEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/slime/_SpecialSlimeEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.slime; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.core.SpecialMobs; import fathertoast.specialmobs.common.entity.ISpecialMob; @@ -37,6 +38,9 @@ public class _SpecialSlimeEntity extends SlimeEntity implements ISpecialMob<_Spe //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species<_SpecialSlimeEntity> SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x51A03E ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/spider/BabySpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/spider/BabySpiderEntity.java index dfee82a..bd2fbe7 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/spider/BabySpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/spider/BabySpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.spider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -12,7 +13,6 @@ import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.item.Items; import net.minecraft.world.World; -import net.minecraftforge.fml.RegistryObject; import javax.annotation.ParametersAreNonnullByDefault; @@ -23,8 +23,8 @@ public class BabySpiderEntity extends _SpecialSpiderEntity { //--------------- Static Special Mob Hooks ---------------- - @SpecialMob.TypeHolder - public static RegistryObject> ENTITY_TYPE; + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { diff --git a/src/main/java/fathertoast/specialmobs/common/entity/spider/DesertSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/spider/DesertSpiderEntity.java index c85ce38..5cda147 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/spider/DesertSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/spider/DesertSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.spider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -27,6 +28,9 @@ public class DesertSpiderEntity extends _SpecialSpiderEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.95F, 0.7F ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/spider/FlyingSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/spider/FlyingSpiderEntity.java index 63a9b30..0505298 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/spider/FlyingSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/spider/FlyingSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.spider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.ai.SpecialLeapAtTargetGoal; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -24,6 +25,9 @@ public class FlyingSpiderEntity extends _SpecialSpiderEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x6388B2 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/spider/GiantSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/spider/GiantSpiderEntity.java index 1607a56..a4170bb 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/spider/GiantSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/spider/GiantSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.spider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -22,6 +23,9 @@ public class GiantSpiderEntity extends _SpecialSpiderEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 1.9F, 1.3F ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/spider/HungrySpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/spider/HungrySpiderEntity.java index 2be8118..b3c26a8 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/spider/HungrySpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/spider/HungrySpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.spider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -34,6 +35,9 @@ public class HungrySpiderEntity extends _SpecialSpiderEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 1.9F, 1.3F ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/spider/MotherSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/spider/MotherSpiderEntity.java index a9e9950..7f3bedf 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/spider/MotherSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/spider/MotherSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.spider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -30,6 +31,9 @@ public class MotherSpiderEntity extends _SpecialSpiderEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 1.7F, 1.0F ); @@ -116,7 +120,7 @@ public class MotherSpiderEntity extends _SpecialSpiderEntity { /** Helper method to simplify spawning babies. */ @Nullable private ILivingEntityData spawnBaby( float speed, @Nullable ILivingEntityData groupData ) { - final BabySpiderEntity baby = BabySpiderEntity.ENTITY_TYPE.get().create( level ); + final BabySpiderEntity baby = BabySpiderEntity.SPECIES.entityType.get().create( level ); if( baby == null ) return groupData; baby.copyPosition( this ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/spider/PaleSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/spider/PaleSpiderEntity.java index e81cc6e..9ec93d1 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/spider/PaleSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/spider/PaleSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.spider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -27,6 +28,9 @@ public class PaleSpiderEntity extends _SpecialSpiderEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xDED4C6 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/spider/PoisonSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/spider/PoisonSpiderEntity.java index 0c1dde2..2a3e377 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/spider/PoisonSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/spider/PoisonSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.spider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.References; @@ -9,7 +10,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.item.Items; import net.minecraft.potion.EffectInstance; import net.minecraft.potion.Effects; @@ -25,17 +25,15 @@ public class PoisonSpiderEntity extends _SpecialSpiderEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x0C424E ); //TODO theme - forest } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialSpiderEntity.createAttributes(); - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Venomous Spider", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/spider/WebSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/spider/WebSpiderEntity.java index dca3b87..ee7fd28 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/spider/WebSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/spider/WebSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.spider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -28,6 +29,9 @@ public class WebSpiderEntity extends _SpecialSpiderEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xE7E7E7, BestiaryInfo.BaseWeight.LOW ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/spider/WitchSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/spider/WitchSpiderEntity.java index 0d3d8cb..08de719 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/spider/WitchSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/spider/WitchSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.spider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -26,6 +27,9 @@ public class WitchSpiderEntity extends _SpecialSpiderEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xDD0E0E, BestiaryInfo.BaseWeight.LOW ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/spider/_SpecialSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/spider/_SpecialSpiderEntity.java index 0dbe4fd..7a916e8 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/spider/_SpecialSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/spider/_SpecialSpiderEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.spider; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.core.SpecialMobs; import fathertoast.specialmobs.common.entity.ISpecialMob; @@ -36,6 +37,9 @@ public class _SpecialSpiderEntity extends SpiderEntity implements ISpecialMob<_S //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species<_SpecialSpiderEntity> SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xA80E0E ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/witch/_SpecialWitchEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/witch/_SpecialWitchEntity.java index b165504..48ec1ba 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/witch/_SpecialWitchEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/witch/_SpecialWitchEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.witch; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.core.SpecialMobs; import fathertoast.specialmobs.common.entity.ISpecialMob; @@ -33,6 +34,9 @@ public class _SpecialWitchEntity extends WitchEntity implements ISpecialMob<_Spe //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species<_SpecialWitchEntity> SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xA80E0E ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/BruteWitherSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/BruteWitherSkeletonEntity.java index e84c51c..5cc9780 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/BruteWitherSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/BruteWitherSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.witherskeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -30,6 +31,9 @@ public class BruteWitherSkeletonEntity extends _SpecialWitherSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.85F, 2.9F ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/GatlingWitherSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/GatlingWitherSkeletonEntity.java index 8fe6e70..46e09e7 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/GatlingWitherSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/GatlingWitherSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.witherskeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -23,6 +24,9 @@ public class GatlingWitherSkeletonEntity extends _SpecialWitherSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xFFFF0B ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/GiantWitherSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/GiantWitherSkeletonEntity.java index 6c299d2..6b1a12d 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/GiantWitherSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/GiantWitherSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.witherskeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -22,6 +23,9 @@ public class GiantWitherSkeletonEntity extends _SpecialWitherSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.95F, 3.6F ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/KnightWitherSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/KnightWitherSkeletonEntity.java index 6f67677..f06e382 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/KnightWitherSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/KnightWitherSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.witherskeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -25,6 +26,9 @@ public class KnightWitherSkeletonEntity extends _SpecialWitherSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xDDDDDD ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/NinjaWitherSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/NinjaWitherSkeletonEntity.java index 6650dfe..dd13624 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/NinjaWitherSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/NinjaWitherSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.witherskeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.ai.INinja; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -36,6 +37,9 @@ public class NinjaWitherSkeletonEntity extends _SpecialWitherSkeletonEntity impl //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x333366 ); @@ -61,7 +65,7 @@ public class NinjaWitherSkeletonEntity extends _SpecialWitherSkeletonEntity impl Blocks.INFESTED_CRACKED_STONE_BRICKS, Blocks.INFESTED_MOSSY_STONE_BRICKS, Blocks.INFESTED_CHISELED_STONE_BRICKS ); } - @SpecialMob.Constructor(hasCustomRenderer = true) + @SpecialMob.Constructor public NinjaWitherSkeletonEntity( EntityType entityType, World world ) { super( entityType, world ); xpReward += 2; diff --git a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/SniperWitherSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/SniperWitherSkeletonEntity.java index d540a59..6b60923 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/SniperWitherSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/SniperWitherSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.witherskeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -23,6 +24,9 @@ public class SniperWitherSkeletonEntity extends _SpecialWitherSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x486720 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/SpitfireWitherSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/SpitfireWitherSkeletonEntity.java index 87eee42..78ef230 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/SpitfireWitherSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/SpitfireWitherSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.witherskeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -24,6 +25,9 @@ public class SpitfireWitherSkeletonEntity extends _SpecialWitherSkeletonEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.95F, 3.6F ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/_SpecialWitherSkeletonEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/_SpecialWitherSkeletonEntity.java index fd2d013..a74d47d 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/_SpecialWitherSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/_SpecialWitherSkeletonEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.witherskeleton; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.core.SpecialMobs; import fathertoast.specialmobs.common.entity.ISpecialMob; @@ -52,6 +53,9 @@ public class _SpecialWitherSkeletonEntity extends WitherSkeletonEntity implement //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species<_SpecialWitherSkeletonEntity> SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x474D4D ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/zombie/BruteZombieEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/zombie/BruteZombieEntity.java index 6c0b546..c438a7a 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/zombie/BruteZombieEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/zombie/BruteZombieEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.zombie; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -30,6 +31,9 @@ public class BruteZombieEntity extends _SpecialZombieEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.7F, 2.35F ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/zombie/FireZombieEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/zombie/FireZombieEntity.java index 5915a33..1bf6d23 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/zombie/FireZombieEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/zombie/FireZombieEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.zombie; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.References; import fathertoast.specialmobs.datagen.loot.LootTableBuilder; @@ -8,7 +9,6 @@ import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.projectile.AbstractArrowEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -27,6 +27,9 @@ public class FireZombieEntity extends _SpecialZombieEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.fireImmune(); @@ -34,11 +37,6 @@ public class FireZombieEntity extends _SpecialZombieEntity { //TODO theme - fire } - @SpecialMob.AttributeCreator - public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialZombieEntity.createAttributes(); - } - @SpecialMob.LanguageProvider public static String[] getTranslations( String langKey ) { return References.translations( langKey, "Fire Zombie", diff --git a/src/main/java/fathertoast/specialmobs/common/entity/zombie/FishingZombieEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/zombie/FishingZombieEntity.java index b349ba5..d9a5d19 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/zombie/FishingZombieEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/zombie/FishingZombieEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.zombie; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.ai.IAngler; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -34,6 +35,9 @@ public class FishingZombieEntity extends _SpecialZombieEntity implements IAngler //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x2D41F4 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/zombie/GiantZombieEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/zombie/GiantZombieEntity.java index 2d9fe26..5d0158f 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/zombie/GiantZombieEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/zombie/GiantZombieEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.zombie; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; @@ -22,6 +23,9 @@ public class GiantZombieEntity extends _SpecialZombieEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { entityType.sized( 0.9F, 2.95F ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/zombie/HungryZombieEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/zombie/HungryZombieEntity.java index 15dd647..0db8f65 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/zombie/HungryZombieEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/zombie/HungryZombieEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.zombie; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -31,6 +32,9 @@ public class HungryZombieEntity extends _SpecialZombieEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xAB1518 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/zombie/HuskZombieEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/zombie/HuskZombieEntity.java index eae4d39..e804148 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/zombie/HuskZombieEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/zombie/HuskZombieEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.zombie; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.References; @@ -10,6 +11,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.ai.attributes.AttributeModifierMap; +import net.minecraft.entity.monster.HuskEntity; import net.minecraft.entity.projectile.AbstractArrowEntity; import net.minecraft.entity.projectile.ArrowEntity; import net.minecraft.item.ItemStack; @@ -30,6 +32,9 @@ public class HuskZombieEntity extends _SpecialZombieEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xE6CC94, BestiaryInfo.BaseWeight.LOW ); @@ -38,7 +43,7 @@ public class HuskZombieEntity extends _SpecialZombieEntity { @SpecialMob.AttributeCreator public static AttributeModifierMap.MutableAttribute createAttributes() { - return _SpecialZombieEntity.createAttributes(); + return HuskEntity.createAttributes(); } @SpecialMob.LanguageProvider diff --git a/src/main/java/fathertoast/specialmobs/common/entity/zombie/MadScientistZombieEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/zombie/MadScientistZombieEntity.java index 3c083b2..a1d079e 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/zombie/MadScientistZombieEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/zombie/MadScientistZombieEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.zombie; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.core.register.SMItems; import fathertoast.specialmobs.common.entity.MobHelper; @@ -32,6 +33,9 @@ public class MadScientistZombieEntity extends _SpecialZombieEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0xDED4C6 ); // TODO - Temp color diff --git a/src/main/java/fathertoast/specialmobs/common/entity/zombie/PlagueZombieEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/zombie/PlagueZombieEntity.java index 6719686..01a2f95 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/zombie/PlagueZombieEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/zombie/PlagueZombieEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.zombie; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.entity.MobHelper; import fathertoast.specialmobs.common.util.AttributeHelper; @@ -17,8 +18,6 @@ import net.minecraft.entity.projectile.AbstractArrowEntity; import net.minecraft.entity.projectile.ArrowEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.potion.EffectInstance; -import net.minecraft.potion.Effects; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; @@ -31,6 +30,9 @@ public class PlagueZombieEntity extends _SpecialZombieEntity { //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { return new BestiaryInfo( 0x8AA838 ); diff --git a/src/main/java/fathertoast/specialmobs/common/entity/zombie/_SpecialZombieEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/zombie/_SpecialZombieEntity.java index 5b1b880..3b6faed 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/zombie/_SpecialZombieEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/zombie/_SpecialZombieEntity.java @@ -1,6 +1,7 @@ package fathertoast.specialmobs.common.entity.zombie; import fathertoast.specialmobs.common.bestiary.BestiaryInfo; +import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.common.core.SpecialMobs; import fathertoast.specialmobs.common.entity.ISpecialMob; @@ -49,9 +50,12 @@ public class _SpecialZombieEntity extends ZombieEntity implements IRangedAttackM //--------------- Static Special Mob Hooks ---------------- + @SpecialMob.SpeciesReference + public static MobFamily.Species<_SpecialZombieEntity> SPECIES; + @SpecialMob.BestiaryInfoSupplier public static BestiaryInfo bestiaryInfo( EntityType.Builder entityType ) { - return new BestiaryInfo( 0x799C65 );//sized(0.6F, 1.95F) + return new BestiaryInfo( 0x799C65 ); } @SpecialMob.AttributeCreator diff --git a/src/main/java/fathertoast/specialmobs/common/util/AnnotationHelper.java b/src/main/java/fathertoast/specialmobs/common/util/AnnotationHelper.java index 3d18990..e2729ac 100644 --- a/src/main/java/fathertoast/specialmobs/common/util/AnnotationHelper.java +++ b/src/main/java/fathertoast/specialmobs/common/util/AnnotationHelper.java @@ -4,11 +4,13 @@ import fathertoast.specialmobs.common.bestiary.BestiaryInfo; import fathertoast.specialmobs.common.bestiary.MobFamily; import fathertoast.specialmobs.common.bestiary.SpecialMob; import fathertoast.specialmobs.datagen.loot.LootTableBuilder; +import mcp.MethodsReturnNonnullByDefault; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.item.Item; +import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; import java.lang.annotation.Annotation; import java.lang.reflect.*; @@ -16,19 +18,21 @@ import java.lang.reflect.*; /** * Provides helper methods to handle annotation processing through reflection. */ +@SuppressWarnings( "SameParameterValue" ) @ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault public final class AnnotationHelper { //--------------- PRETTY HELPER METHODS ---------------- /** Creates an entity factory from a special mob species. Throws an exception if anything goes wrong. */ - public static void injectEntityTypeHolder( MobFamily.Species species ) { + public static void injectSpeciesReference( MobFamily.Species species ) { try { - final Field field = getFieldOptional( species.entityClass, SpecialMob.TypeHolder.class ); - if( field != null ) field.set( null, species.entityType ); + final Field field = getField( species.entityClass, SpecialMob.SpeciesReference.class ); + field.set( null, species ); } - catch( IllegalAccessException ex ) { - throw new RuntimeException( "Entity class for " + species.name + " has invalid entity type holder", ex ); + catch( IllegalAccessException | NoSuchFieldException ex ) { + throw new RuntimeException( "Entity class for " + species.name + " has invalid species reference holder", ex ); } } @@ -63,7 +67,7 @@ public final class AnnotationHelper { /** Creates an attribute modifier map from a special mob species. Throws an exception if anything goes wrong. */ public static AttributeModifierMap createAttributes( MobFamily.Species species ) { try { - return ((AttributeModifierMap.MutableAttribute) getMethod( species.entityClass, SpecialMob.AttributeCreator.class ) + return ((AttributeModifierMap.MutableAttribute) getMethodOrSuper( species.entityClass, SpecialMob.AttributeCreator.class ) .invoke( null )).build(); } catch( NoSuchMethodException | InvocationTargetException | IllegalAccessException ex ) { @@ -104,31 +108,18 @@ public final class AnnotationHelper { throw new RuntimeException( "Entity class for " + species.name + " has invalid loot table builder method", ex ); } } - - /** - * Returns the boolean value for custom rendering from the target class' Constructor annotation. - * {@link SpecialMob.Constructor#hasCustomRenderer()} - */ - public static boolean hasCustomRenderer( Class entityClass ) { - if (entityClass.isAnnotationPresent(SpecialMob.Constructor.class)) { - return entityClass.getDeclaredAnnotation(SpecialMob.Constructor.class).hasCustomRenderer(); - } - else { - return false; - } - } //--------------- RAW ANNOTATION METHODS ---------------- /** * @return Pulls a static field with a specific annotation from a class. - * @throws NoSuchFieldException if the field does not exist. + * @throws NoSuchFieldException if the field does not exist in the class. */ private static Field getField( Class type, Class annotation ) throws NoSuchFieldException { final Field field = getFieldOptional( type, annotation ); if( field == null ) { - throw new NoSuchFieldException( String.format( "Could not find static @%s annotated field in %s", + throw new NoSuchFieldException( String.format( "Could not find required static @%s annotated field in %s", annotation.getSimpleName(), type.getName() ) ); } return field; @@ -137,8 +128,9 @@ public final class AnnotationHelper { /** * @return Pulls a static field with a specific annotation from a class, or null if the field does not exist. */ + @Nullable private static Field getFieldOptional( Class type, Class annotation ) { - for( Field field : type.getFields() ) { + for( Field field : type.getDeclaredFields() ) { if( Modifier.isStatic( field.getModifiers() ) && field.isAnnotationPresent( annotation ) ) return field; } @@ -147,26 +139,32 @@ public final class AnnotationHelper { /** * @return Pulls a static method with a specific annotation from a class. - * @throws NoSuchMethodException if the method does not exist. + * @throws NoSuchMethodException if the method does not exist in the class. */ private static Method getMethod( Class type, Class annotation ) throws NoSuchMethodException { - final Method method = getMethodOptional( type, annotation ); - if( method == null ) { - throw new NoSuchMethodException( String.format( "Could not find static @%s annotated method in %s", - annotation.getSimpleName(), type.getName() ) ); - } - return method; - } - - /** - * @return Pulls a static method with a specific annotation from a class, or null if the method does not exist. - */ - private static Method getMethodOptional( Class type, Class annotation ) { - for( Method method : type.getMethods() ) { + for( Method method : type.getDeclaredMethods() ) { if( Modifier.isStatic( method.getModifiers() ) && method.isAnnotationPresent( annotation ) ) return method; } - return null; + throw new NoSuchMethodException( String.format( "Could not find required static @%s annotated method in %s", + annotation.getSimpleName(), type.getName() ) ); + } + + /** + * @return Pulls a static method with a specific annotation from a class, or its super class(es) if none is defined in the class. + * @throws NoSuchMethodException if the method does not exist in the class or any of its parents. + */ + private static Method getMethodOrSuper( Class type, Class annotation ) throws NoSuchMethodException { + Class currentType = type; + while( currentType != LivingEntity.class ) { + for( Method method : currentType.getDeclaredMethods() ) { + if( Modifier.isStatic( method.getModifiers() ) && method.isAnnotationPresent( annotation ) ) + return method; + } + currentType = currentType.getSuperclass(); + } + throw new NoSuchMethodException( String.format( "Could not find 'overridable' static @%s annotated method in %s or its parents", + annotation.getSimpleName(), type.getName() ) ); } /**