From 2a221eaddc9d60261d3ff8858e0e43b9bf686a8e Mon Sep 17 00:00:00 2001 From: FatherToast Date: Sun, 24 Jul 2022 00:12:12 -0500 Subject: [PATCH] cave bois --- .../common/bestiary/MobFamily.java | 4 +- .../cavespider/DesertCaveSpiderEntity.java | 77 ++++++++++++++ .../cavespider/FireCaveSpiderEntity.java | 68 ++++++++++++ .../cavespider/PaleCaveSpiderEntity.java | 70 ++++++++++++ .../cavespider/WaterCaveSpiderEntity.java | 100 ++++++++++++++++++ .../entity/spider/WaterSpiderEntity.java | 2 +- .../textures/entity/cave_spider/desert.png | Bin 0 -> 974 bytes .../entity/cave_spider/desert_eyes.png | Bin 0 -> 209 bytes .../textures/entity/cave_spider/fire.png | Bin 0 -> 830 bytes .../textures/entity/cave_spider/fire_eyes.png | Bin 0 -> 272 bytes .../textures/entity/cave_spider/pale.png | Bin 0 -> 897 bytes .../textures/entity/cave_spider/pale_eyes.png | Bin 0 -> 225 bytes .../textures/entity/cave_spider/water.png | Bin 0 -> 887 bytes .../entity/cave_spider/water_eyes.png | Bin 0 -> 220 bytes .../textures/entity/cave_spider/web_eyes.png | Bin 380 -> 380 bytes .../textures/entity/spider/web_eyes.png | Bin 380 -> 380 bytes 16 files changed, 318 insertions(+), 3 deletions(-) create mode 100644 src/main/java/fathertoast/specialmobs/common/entity/cavespider/DesertCaveSpiderEntity.java create mode 100644 src/main/java/fathertoast/specialmobs/common/entity/cavespider/FireCaveSpiderEntity.java create mode 100644 src/main/java/fathertoast/specialmobs/common/entity/cavespider/PaleCaveSpiderEntity.java create mode 100644 src/main/java/fathertoast/specialmobs/common/entity/cavespider/WaterCaveSpiderEntity.java create mode 100644 src/main/resources/assets/specialmobs/textures/entity/cave_spider/desert.png create mode 100644 src/main/resources/assets/specialmobs/textures/entity/cave_spider/desert_eyes.png create mode 100644 src/main/resources/assets/specialmobs/textures/entity/cave_spider/fire.png create mode 100644 src/main/resources/assets/specialmobs/textures/entity/cave_spider/fire_eyes.png create mode 100644 src/main/resources/assets/specialmobs/textures/entity/cave_spider/pale.png create mode 100644 src/main/resources/assets/specialmobs/textures/entity/cave_spider/pale_eyes.png create mode 100644 src/main/resources/assets/specialmobs/textures/entity/cave_spider/water.png create mode 100644 src/main/resources/assets/specialmobs/textures/entity/cave_spider/water_eyes.png diff --git a/src/main/java/fathertoast/specialmobs/common/bestiary/MobFamily.java b/src/main/java/fathertoast/specialmobs/common/bestiary/MobFamily.java index 48ba7a8..f34ac3a 100644 --- a/src/main/java/fathertoast/specialmobs/common/bestiary/MobFamily.java +++ b/src/main/java/fathertoast/specialmobs/common/bestiary/MobFamily.java @@ -81,8 +81,8 @@ public class MobFamily { ); public static final MobFamily CAVE_SPIDER = new MobFamily<>( FamilyConfig::newMoreSpecial, "CaveSpider", "cave spiders", 0x0C424E, new EntityType[] { EntityType.CAVE_SPIDER }, - "Baby", /*"Desert", "Fire",*/ "Flying", "Mother", /*"Water",*/ "Web", "Witch" - );//TODO desert, fire, water + "Baby", "Desert", "Fire", "Flying", "Mother", "Pale", "Water", "Web", "Witch" + ); public static final MobFamily SILVERFISH = new MobFamily<>( SilverfishFamilyConfig::new, "Silverfish", "silverfish", 0x6E6E6E, new EntityType[] { EntityType.SILVERFISH }, diff --git a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/DesertCaveSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/DesertCaveSpiderEntity.java new file mode 100644 index 0000000..2881174 --- /dev/null +++ b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/DesertCaveSpiderEntity.java @@ -0,0 +1,77 @@ +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.config.Config; +import fathertoast.specialmobs.common.entity.MobHelper; +import fathertoast.specialmobs.common.util.References; +import fathertoast.specialmobs.datagen.loot.LootTableBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.item.Items; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraft.world.World; + +@SpecialMob +public class DesertCaveSpiderEntity extends _SpecialCaveSpiderEntity { + + //--------------- Static Special Mob Hooks ---------------- + + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + + @SpecialMob.BestiaryInfoSupplier + public static void getBestiaryInfo( BestiaryInfo.Builder bestiaryInfo ) { + bestiaryInfo.color( 0xE6DDAC ).theme( BestiaryInfo.Theme.DESERT ) + .uniqueTextureWithEyes() + .size( 0.6F, 0.7F, 0.5F ) + .addExperience( 2 ) + .addToAttribute( Attributes.MAX_HEALTH, 4.0 ); + } + + @SpecialMob.LanguageProvider + public static String[] getTranslations( String langKey ) { + return References.translations( langKey, "Desert Cave Spider", + "", "", "", "", "", "" );//TODO + } + + @SpecialMob.LootTableProvider + public static void buildLootTable( LootTableBuilder loot ) { + addBaseLoot( loot ); + loot.addCommonDrop( "common", Items.LEATHER ); + } + + @SpecialMob.Factory + public static EntityType.IFactory getVariantFactory() { return DesertCaveSpiderEntity::new; } + + /** @return This entity's mob species. */ + @SpecialMob.SpeciesSupplier + @Override + public MobFamily.Species getSpecies() { return SPECIES; } + + + //--------------- Variant-Specific Implementations ---------------- + + public DesertCaveSpiderEntity( EntityType entityType, World world ) { super( entityType, world ); } + + /** Override to apply effects when this entity hits a target with a melee attack. */ + @Override + protected void onVariantAttack( Entity target ) { + if( target instanceof LivingEntity ) { + final LivingEntity livingTarget = (LivingEntity) target; + final int duration = MobHelper.getDebuffDuration( level.getDifficulty() ); + + if( Config.MAIN.GENERAL.enableNausea.get() ) { + livingTarget.addEffect( new EffectInstance( Effects.CONFUSION, duration, 0 ) ); + } + livingTarget.addEffect( new EffectInstance( Effects.BLINDNESS, duration, 0 ) ); + + livingTarget.addEffect( new EffectInstance( Effects.MOVEMENT_SLOWDOWN, duration, 2 ) ); + livingTarget.addEffect( new EffectInstance( Effects.DAMAGE_RESISTANCE, duration, -3 ) ); // 40% inc damage taken + } + } +} \ No newline at end of file diff --git a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/FireCaveSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/FireCaveSpiderEntity.java new file mode 100644 index 0000000..acdb4a3 --- /dev/null +++ b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/FireCaveSpiderEntity.java @@ -0,0 +1,68 @@ +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.References; +import fathertoast.specialmobs.datagen.loot.LootTableBuilder; +import net.minecraft.block.Blocks; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.Items; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +@SpecialMob +public class FireCaveSpiderEntity extends _SpecialCaveSpiderEntity { + + //--------------- Static Special Mob Hooks ---------------- + + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + + @SpecialMob.BestiaryInfoSupplier + public static void getBestiaryInfo( BestiaryInfo.Builder bestiaryInfo ) { + bestiaryInfo.color( 0xDFA21B ).weight( BestiaryInfo.DefaultWeight.LOW ).theme( BestiaryInfo.Theme.FIRE ) + .uniqueTextureWithEyes() + .addExperience( 2 ).fireImmune().waterSensitive(); + } + + @SpecialMob.LanguageProvider + public static String[] getTranslations( String langKey ) { + return References.translations( langKey, "Cave Firefang", + "", "", "", "", "", "" );//TODO + } + + @SpecialMob.LootTableProvider + public static void buildLootTable( LootTableBuilder loot ) { + addBaseLoot( loot ); + loot.addCommonDrop( "common", Items.FIRE_CHARGE ); + loot.addUncommonDrop( "uncommon", Items.COAL ); + } + + @SpecialMob.Factory + public static EntityType.IFactory getVariantFactory() { return FireCaveSpiderEntity::new; } + + /** @return This entity's mob species. */ + @SpecialMob.SpeciesSupplier + @Override + public MobFamily.Species getSpecies() { return SPECIES; } + + + //--------------- Variant-Specific Implementations ---------------- + + public FireCaveSpiderEntity( EntityType entityType, World world ) { super( entityType, world ); } + + /** Override to apply effects when this entity hits a target with a melee attack. */ + @Override + protected void onVariantAttack( Entity target ) { + if( !level.isClientSide() && target instanceof LivingEntity ) { + final BlockPos pos = target.blockPosition(); + if( level.getBlockState( pos ).getMaterial().isReplaceable() ) { + level.setBlock( pos, Blocks.FIRE.defaultBlockState(), References.SetBlockFlags.DEFAULTS ); + } + } + target.setSecondsOnFire( 5 ); + } +} \ No newline at end of file diff --git a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/PaleCaveSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/PaleCaveSpiderEntity.java new file mode 100644 index 0000000..e787d36 --- /dev/null +++ b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/PaleCaveSpiderEntity.java @@ -0,0 +1,70 @@ +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.References; +import fathertoast.specialmobs.datagen.loot.LootTableBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.item.Items; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; +import net.minecraft.world.World; + +@SpecialMob +public class PaleCaveSpiderEntity extends _SpecialCaveSpiderEntity { + + //--------------- Static Special Mob Hooks ---------------- + + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + + @SpecialMob.BestiaryInfoSupplier + public static void getBestiaryInfo( BestiaryInfo.Builder bestiaryInfo ) { + bestiaryInfo.color( 0xDED4C6 ).theme( BestiaryInfo.Theme.ICE ) + .uniqueTextureWithEyes() + .addExperience( 1 ) + .addToAttribute( Attributes.ARMOR, 15.0 ); + } + + @SpecialMob.LanguageProvider + public static String[] getTranslations( String langKey ) { + return References.translations( langKey, "Pale Cave Spider", + "", "", "", "", "", "" );//TODO + } + + @SpecialMob.LootTableProvider + public static void buildLootTable( LootTableBuilder loot ) { + addBaseLoot( loot ); + loot.addSemicommonDrop( "semicommon", Items.FERMENTED_SPIDER_EYE ); + } + + @SpecialMob.Factory + public static EntityType.IFactory getVariantFactory() { return PaleCaveSpiderEntity::new; } + + /** @return This entity's mob species. */ + @SpecialMob.SpeciesSupplier + @Override + public MobFamily.Species getSpecies() { return SPECIES; } + + + //--------------- Variant-Specific Implementations ---------------- + + public PaleCaveSpiderEntity( EntityType entityType, World world ) { super( entityType, world ); } + + /** Override to apply effects when this entity hits a target with a melee attack. */ + @Override + protected void onVariantAttack( Entity target ) { + if( target instanceof LivingEntity ) { + final LivingEntity livingTarget = (LivingEntity) target; + final int duration = MobHelper.getDebuffDuration( level.getDifficulty() ); + + livingTarget.addEffect( new EffectInstance( Effects.WEAKNESS, duration, 0 ) ); + livingTarget.addEffect( new EffectInstance( Effects.DIG_SLOWDOWN, duration, 1 ) ); + } + } +} \ No newline at end of file diff --git a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/WaterCaveSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/WaterCaveSpiderEntity.java new file mode 100644 index 0000000..bc24207 --- /dev/null +++ b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/WaterCaveSpiderEntity.java @@ -0,0 +1,100 @@ +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.entity.ai.AIHelper; +import fathertoast.specialmobs.common.entity.ai.FluidPathNavigator; +import fathertoast.specialmobs.common.util.References; +import fathertoast.specialmobs.datagen.loot.LootEntryItemBuilder; +import fathertoast.specialmobs.datagen.loot.LootPoolBuilder; +import fathertoast.specialmobs.datagen.loot.LootTableBuilder; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.Items; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.pathfinding.PathNavigator; +import net.minecraft.pathfinding.PathNodeType; +import net.minecraft.tags.FluidTags; +import net.minecraft.world.World; + +@SpecialMob +public class WaterCaveSpiderEntity extends _SpecialCaveSpiderEntity { + + //--------------- Static Special Mob Hooks ---------------- + + @SpecialMob.SpeciesReference + public static MobFamily.Species SPECIES; + + @SpecialMob.BestiaryInfoSupplier + public static void getBestiaryInfo( BestiaryInfo.Builder bestiaryInfo ) { + bestiaryInfo.color( 0x2D41F4 ).theme( BestiaryInfo.Theme.WATER ) + .uniqueTextureWithEyes() + .addExperience( 1 ).drownImmune().fluidPushImmune() + .addToAttribute( Attributes.ATTACK_DAMAGE, 1.0 ); + } + + @SpecialMob.LanguageProvider + public static String[] getTranslations( String langKey ) { + return References.translations( langKey, "Water Cave Spider", + "", "", "", "", "", "" );//TODO + } + + @SpecialMob.LootTableProvider + public static void buildLootTable( LootTableBuilder loot ) { + addBaseLoot( loot ); + loot.addPool( new LootPoolBuilder( "common" ) + .addEntry( new LootEntryItemBuilder( Items.COD ).setCount( 0, 2 ).addLootingBonus( 0, 1 ).smeltIfBurning().toLootEntry() ) + .toLootPool() ); + loot.addPool( new LootPoolBuilder( "semicommon" ) + .addEntry( new LootEntryItemBuilder( Items.SALMON ).setCount( 0, 1 ).addLootingBonus( 0, 1 ).smeltIfBurning().toLootEntry() ) + .toLootPool() ); + } + + @SpecialMob.Factory + public static EntityType.IFactory getVariantFactory() { return WaterCaveSpiderEntity::new; } + + /** @return This entity's mob species. */ + @SpecialMob.SpeciesSupplier + @Override + public MobFamily.Species getSpecies() { return SPECIES; } + + + //--------------- Variant-Specific Implementations ---------------- + + public WaterCaveSpiderEntity( EntityType entityType, World world ) { + super( entityType, world ); + setPathfindingMalus( PathNodeType.WATER, PathNodeType.WALKABLE.getMalus() ); + } + + /** Override to change this entity's AI goals. */ + @Override + protected void registerVariantGoals() { + AIHelper.replaceWaterAvoidingRandomWalking( this, 0.8 ); + } + + /** @return A new path navigator for this entity to use. */ + @Override + protected PathNavigator createNavigation( World world ) { + return new FluidPathNavigator( this, world, true, false ); + } + + /** @return Whether this entity can stand on a particular type of fluid. */ + @Override + public boolean canStandOnFluid( Fluid fluid ) { return fluid.is( FluidTags.WATER ); } + + /** Called each tick to update this entity. */ + @Override + public void tick() { + super.tick(); + MobHelper.floatInFluid( this, 0.06, FluidTags.WATER ); + } + + /** Override to load data from this entity's NBT data. */ + @Override + public void readVariantSaveData( CompoundNBT saveTag ) { + setPathfindingMalus( PathNodeType.WATER, PathNodeType.WALKABLE.getMalus() ); + } +} \ No newline at end of file diff --git a/src/main/java/fathertoast/specialmobs/common/entity/spider/WaterSpiderEntity.java b/src/main/java/fathertoast/specialmobs/common/entity/spider/WaterSpiderEntity.java index 1d87062..73ff361 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/spider/WaterSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/spider/WaterSpiderEntity.java @@ -33,7 +33,7 @@ public class WaterSpiderEntity extends _SpecialSpiderEntity { bestiaryInfo.color( 0x2D41F4 ).theme( BestiaryInfo.Theme.WATER ) .uniqueTextureWithEyes() .addExperience( 1 ).drownImmune().fluidPushImmune() - .addToAttribute( Attributes.ATTACK_DAMAGE, 1.0 ); + .addToAttribute( Attributes.ATTACK_DAMAGE, 1.0 ).addToRangedDamage( 1.0 ); } @SpecialMob.LanguageProvider diff --git a/src/main/resources/assets/specialmobs/textures/entity/cave_spider/desert.png b/src/main/resources/assets/specialmobs/textures/entity/cave_spider/desert.png new file mode 100644 index 0000000000000000000000000000000000000000..68e388ffb92e1907995369ba713cb6ca2069b08e GIT binary patch literal 974 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`V*`9bT;qMrDiXcAi^4q2wdS@aub!BHWMxx?i%DjXU8J+Isk+RXi3Qz7 z;YU_Ag&by34q&KA@Dej%>@Ex|i*?Toww>3S(o+<+bMsCjqW=)&Jo%C!zu^CP0mE6zG6A4c&H|6fVg?3oVGw3ym^DX&fr06~r;B5VhxgPe zx64)=@VMmm80sxqxYRS#>+}ElmETUBYn}IGA(yyvrknCj?RPoP=9KUH`SbHl^MmV- z#ozZmT>4XQM$*&+zmG}Fh}DWR+-$qbof>C%?m>g>l(0ci_fOENkbiqupqPq4XQ zR==pcdZTH>#M{*u&bB#h77Bay+UvE{eyNOtjitIGA#2`AH+pS0(v74(wH2aeTt`qo;Nq zTmOtfyk_I8eL2Y+r~JB8yi}&B&hw?}^EWrlwyb6p%rKsCX+wF)Q8SiWsbhBy_;#LG zT;aoUbNjx|-uk=8Yp=h3{5nq7ea&=@t-tre+G=B z$SZZ>g(oZA+jm_!vGRX4nlZE9C2;4NkbrvA tj`@NsrbTLIpI^ml!esye literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/specialmobs/textures/entity/cave_spider/desert_eyes.png b/src/main/resources/assets/specialmobs/textures/entity/cave_spider/desert_eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..b608ae35648dd05e2d582606db4a554fe43cbf6b GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0WWg+Z8+Vb&Z8pkSJ(i(^QJ^V^FXIU53aS{_z2--zPYd!Qkf z_lBu2A@?;yB@54uj$YTAKk>zlCYDM-EesAur?sThXP%#^_w4sR&$xB-PbDARUK{-A xc6|Nbn3?mY+kIb@XHY3O`|q(5O0fcQJzf1=);T3K0RT0ZL!P)Px#1ZP1_K>z@;j|==^1poj5Cs0gOMI{#*EFK^>BPGdf0^gz=B^DSxC@VrNE>ANw z@6A@1O)VS`5C8xGN!b*~0000DbW%=J|NsC0|NsC0|NsC006pj;h5!Hn32;bRa{vGf z6951U69E94oEQKA0*6UNK~zXfb(M)?gD?z3$*}}j|NncZC%e$JtAP??OFp67!?JB< z_T0&(Kp^_TXg7pn+3b(JD?T?nWZSfbAr>(pN&v~Y85Llp9u+cyEOwQ?-1 zQ-2BZ&pC#>DXZLu;9}6i$#|XmOXL>(w3RG!n;Hn@E!7Wd6MWWS?!fm6K-WT$W2l>T zu}=LZo4|n&$?azwLtJ848A^m%l;f!cIs_U*o<@urvJj}iC^;B?BB^DRI+g!E+rD?* z$aregiO4}>E%q%2$QgYO_GEl0fL-U&-7MqLt^~#_T<4H8W!pJ>n@2x7cQ*n8J6Z`Q zLLG1}yi+Cqeb&9V-uBActX9e_v6dhpj7-q(YuTIpIs@HW+oL)W;YvWGRUj1&0wR@J zDYKn*^ka^rk9xK#0=(PgErOwOi6EfYX|wu!o~<8}-p=zk_M*#gT`*c45JV6k1NAN| zfd+vr=mBBEkgBh;5C}JUWy#$&QVmn}Rn`a)y!%H4dQ8<<(Tp(bB#*hi8Q_V-^%ynw z^(t#R60^t#TprbA)m|g+(G`@o8_XV58u7#|q6l^z1L0#u079f!S|SoT(YgL3JwECrz3~=1v!CM}WKhC}{59ug#5C8xG07*qo IM6N<$g5aWM^#A|> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/specialmobs/textures/entity/cave_spider/fire_eyes.png b/src/main/resources/assets/specialmobs/textures/entity/cave_spider/fire_eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..03803b4517d519df7d581b0d76465e4360e81ebd GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1``2&1HTup2_p@WjftI+EgLqS7GoWnhikQNI@wZ_vzA~u^@yeItJ<50@nrzP*JXELD-=m-W+S3j3^ HP6Px#1ZP1_K>z@;j|==^1poj5JWxzjMMhd!V0ChFiibp5Sc9FMkE*Do!M|mAcXo}8 zh@haEG;d@mOG#W@-ASL7t*z|z^%f;1%GTDc#l-*s0Pin?5^GIJ7-fB44KI!VAI1bxn=$GDSDJuqQ| zAZOq_H29kXh&D}45lD6q&c8JCDsW(Pt8SWamX^>+=20tieJ#B<4xa>=el zl)(|j+5ZUCgWrr5;V z$*uRqwxQkfB7&-JwrKQ?5JBwTz`D)b zHb);?w9`^olycj&T$k%)nyU)6+*J;&+ng)nyJZNxK+BzPFi-cr(m^U<*zc3?({btt z)@?3Qhhlo@0?ax?uKR8UlCs~6?R$kl**)Z?1ozrT4@A!e0gj!=$6o6G!DNph?I9UX z1bv&g);_(7!o$$U(px(d%xzvF;2f#HvcC~<@Y=dI1kilt&-OpW-+2WBws*T}MLhzR}U%cyc%f=4455GJbw4l4B$WP}?StNO>0%AKC8&L@Kc$ zw9o~p6_J)j&n=Z?8JLqL&q_2I^eO8@7W~OTV(QVey&;H5310)O&{dQU_jOP5hG1RQ zFTvISi1)o<)SO9EQSuJV$r6D`_kSX1a0Iuz1k|>QWPL}VTyBxppJyk~5H&F0?D6;q X_-sxAj6?W900000NkvXXu0mjfi>aeW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/specialmobs/textures/entity/cave_spider/pale_eyes.png b/src/main/resources/assets/specialmobs/textures/entity/cave_spider/pale_eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0452603c7c4567674618a073233fd676fb556f GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`c>;VwTxXi(r)YTJ^_&kB;NP&M8>Frz$S?T+|NjgQS}VT*`J4qFk;M!Q z+`=Ht$S`Y;1W?e=)5S5w!~1QYAs@&}$AACRwF4JlWPJP}Az#zE+VPDLmxe}->W5{& zEQ>xc9-CbjG9hbYs=AiIQL*eNJ|PS)(@iY|-YjfrVq$&InkIQNTKuxO6AQ?h44$rj JF6*2UngH$-Llgi2 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/specialmobs/textures/entity/cave_spider/water.png b/src/main/resources/assets/specialmobs/textures/entity/cave_spider/water.png new file mode 100644 index 0000000000000000000000000000000000000000..712c711f59725287ec923fa94c60b299eee0f375 GIT binary patch literal 887 zcmV--1Bm>IP)Px#1ZP1_K>z@;j|==^1poj5IZ#YgMY-77#^U29N=FkkG(mK6Op}Z#TUaPoSTA8+ zY>|;UaBxL{e^Z>CdjL{B051OkstX$%9xpEd007+z(i{K)026dlPE-H?|NsC0|NsC0 z|NsC0|NsC00J44D2mk;832;bRa{vGi!2kdb!2!6DYwZ940;owuK~zXfb(IT)f*=rt zd1N7IdHw$%d*2M$omQI)E<3}%r0}$am~sp$^Gna?WxD#BEtC46A(YQa`=q^pcp#7{t-Cr{?lWBd!qr^ zxKjdM4g~Cp2>Y68KGt6{69LdUS13r>P>X;C1@9p3q~~M(B@m?6AOJ0^p|%G*0~57F zpO5vI%)-k9Sz$5M$^js&a9`9Wc+bIHTjiQXE*FQ|1ONeP@LHdb^_S$fG%jH+L%o-= z3w5MOq*$G8DJ4sz=_-P|RMKR}jhqPNC%F!U(!DCF3X<6TzAP()B5o)hNGV5xLPwUF z!F#J9ZXb*vIIwU%Ru{{7t)2(~_FJ`L1DVLSwe{W}>tof}I)%2!%Towcnk~sePp3nb z|4S>&dSCBL(cG+F%qN1<5FijZKyP2t5;ydUfMJVE&rbL7EeEYR2O^NCn5ERVtyDdW=)OrqL&k>i+%J%c~6Sms6z+~$>)lkk3tR+&$QixFm-HEq`I?IWG z9wE>Ym0uCOe-mdp<{*~FXJ2D*@b06r^i_@oVOHX2^1uiIJY(srsORWjb%Z4H)y~mV zrO2Ow*{JTZV!H%frZLnhn9a(6q@Tg4?yR7NLA@D1h7)KIjNCyScsiN&Js2pRNYE7G zN*}|)0~zzt>8OOl!u!tP1JK>^Iibq8EcMNiwDF^XpfucE=KMmCGlqt%Zj3V5+{j*w zf&W6llK(0=Wo)c2<+e&VX~*$0FbB~e3s#c8t)E9F4C44Z2mj>x`~}l8PS<{`)OG*> N002ovPDHLkV1lv7mTdq4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/specialmobs/textures/entity/cave_spider/water_eyes.png b/src/main/resources/assets/specialmobs/textures/entity/cave_spider/water_eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..f83cac73c6b04cc838b61cafa921be4122a77f1e GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4uUY_j)~cCfr5peE{-7?&TlUq+L=syYy4R_w39MH{1VAy8K{W()(}z zPYP#US$Tbh>YVL2OswwipL#TNUjMg^Te}2oGyk2r%?Q$K;2Oo~+n{p9e#`E;Aik%o KpUXO@geCw)`%`cL literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/specialmobs/textures/entity/cave_spider/web_eyes.png b/src/main/resources/assets/specialmobs/textures/entity/cave_spider/web_eyes.png index d4561a2aad2ca2747439b469626413de12d2c3a6..e53b78a85b9ee121e7ef9bdbac49cd854b30d6fb 100644 GIT binary patch delta 39 ucmeyv^oMDJr;L%gxr3*hnue;poOF9|LR(P0yr3up1H-*(l?5A9#TfzY8w+g! delta 39 vcmeyv^oMDJr%Y3O`-GX($|_3p^RnB66WW5}n{#kRdr*3tptw8(14FRd(`Oq~#Tfw`tPMs0