From a504a0c885311bc4997806e8289dfe9b39008296 Mon Sep 17 00:00:00 2001 From: FatherToast Date: Tue, 28 Jun 2022 13:04:46 -0500 Subject: [PATCH 1/4] Mebe this will help the crashes? --- .../fathertoast/specialmobs/common/util/AnnotationHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fathertoast/specialmobs/common/util/AnnotationHelper.java b/src/main/java/fathertoast/specialmobs/common/util/AnnotationHelper.java index e2729ac..1061a02 100644 --- a/src/main/java/fathertoast/specialmobs/common/util/AnnotationHelper.java +++ b/src/main/java/fathertoast/specialmobs/common/util/AnnotationHelper.java @@ -172,7 +172,7 @@ public final class AnnotationHelper { * @throws NoSuchMethodException if the constructor does not exist. */ private static Constructor getConstructor( Class type, Class annotation ) throws NoSuchMethodException { - for( Constructor constructor : type.getConstructors() ) { + for( Constructor constructor : type.getDeclaredConstructors() ) { if( constructor.isAnnotationPresent( annotation ) ) //noinspection unchecked return (Constructor) constructor; From bdb22925ae4bbb7e1a5b980efc36b721330308d3 Mon Sep 17 00:00:00 2001 From: FatherToast Date: Tue, 28 Jun 2022 14:03:48 -0500 Subject: [PATCH 2/4] ninja'd --- .../entity/NinjaSkeletonRenderer.java | 47 ++--- .../specialmobs/common/entity/ai/INinja.java | 12 +- .../common/entity/ai/NinjaGoal.java | 186 ++++++++++++++++++ .../entity/skeleton/NinjaSkeletonEntity.java | 93 +++++---- .../NinjaWitherSkeletonEntity.java | 99 ++++++---- 5 files changed, 317 insertions(+), 120 deletions(-) create mode 100644 src/main/java/fathertoast/specialmobs/common/entity/ai/NinjaGoal.java diff --git a/src/main/java/fathertoast/specialmobs/client/renderer/entity/NinjaSkeletonRenderer.java b/src/main/java/fathertoast/specialmobs/client/renderer/entity/NinjaSkeletonRenderer.java index 2097998..11b4c31 100644 --- a/src/main/java/fathertoast/specialmobs/client/renderer/entity/NinjaSkeletonRenderer.java +++ b/src/main/java/fathertoast/specialmobs/client/renderer/entity/NinjaSkeletonRenderer.java @@ -1,22 +1,15 @@ package fathertoast.specialmobs.client.renderer.entity; import com.mojang.blaze3d.matrix.MatrixStack; -import fathertoast.specialmobs.client.renderer.entity.layers.SpecialMobEyesLayer; -import fathertoast.specialmobs.client.renderer.entity.layers.SpecialMobOverlayLayer; -import fathertoast.specialmobs.common.entity.ISpecialMob; import fathertoast.specialmobs.common.entity.ai.INinja; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.BlockRendererDispatcher; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.entity.EntityRendererManager; -import net.minecraft.client.renderer.entity.SkeletonRenderer; -import net.minecraft.client.renderer.entity.model.SkeletonModel; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.entity.monster.AbstractSkeletonEntity; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.model.data.EmptyModelData; @@ -26,51 +19,35 @@ import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @OnlyIn( Dist.CLIENT ) -public class NinjaSkeletonRenderer extends SkeletonRenderer { +public class NinjaSkeletonRenderer extends SpecialSkeletonRenderer { - private final float baseShadowRadius; private final BlockRendererDispatcher blockRenderer; public NinjaSkeletonRenderer( EntityRendererManager rendererManager ) { super( rendererManager ); - baseShadowRadius = shadowRadius = shadowStrength = 0.0F; blockRenderer = Minecraft.getInstance().getBlockRenderer(); - addLayer( new SpecialMobEyesLayer<>( this ) ); - addLayer( new SpecialMobOverlayLayer<>( this, new SkeletonModel<>() ) ); } @Override - public void render( AbstractSkeletonEntity skeletonEntity, float f1, float f2, MatrixStack matrixStack, IRenderTypeBuffer buffer, int i ) { - BlockState disguiseState = ((INinja) skeletonEntity).getDisguiseBlock(); - - if( disguiseState == null ) { - super.render( skeletonEntity, f1, f2, matrixStack, buffer, i ); + public void render( AbstractSkeletonEntity entity, float rotation, float partialTicks, + MatrixStack matrixStack, IRenderTypeBuffer buffer, int packedLight ) { + final BlockState disguiseBlock = ((INinja) entity).getHiddenDragon(); + if( disguiseBlock == null ) { + super.render( entity, rotation, partialTicks, matrixStack, buffer, packedLight ); } else { - renderBlockDisguise( (AbstractSkeletonEntity & INinja) skeletonEntity, disguiseState, f1, f2, matrixStack, buffer, i ); + shadowRadius = 0.0F; + renderBlockDisguise( entity, disguiseBlock, rotation, partialTicks, matrixStack, buffer, packedLight ); } } - private void renderBlockDisguise( T ninja, BlockState state, float f1, float f2, MatrixStack matrixStack, IRenderTypeBuffer buffer, int i ) { + private void renderBlockDisguise( AbstractSkeletonEntity ninja, BlockState block, float rotation, float partialTicks, + MatrixStack matrixStack, IRenderTypeBuffer buffer, int packedLight ) { matrixStack.pushPose(); - matrixStack.translate( -0.5D, 0.0D, -0.5D ); - this.blockRenderer.renderBlock( Blocks.LECTERN.defaultBlockState(), matrixStack, buffer, i, OverlayTexture.NO_OVERLAY, EmptyModelData.INSTANCE ); + matrixStack.translate( -0.5, 0.0, -0.5 ); + blockRenderer.renderBlock( block, matrixStack, buffer, packedLight, OverlayTexture.NO_OVERLAY, EmptyModelData.INSTANCE ); matrixStack.popPose(); } - - @Override - public ResourceLocation getTextureLocation( AbstractSkeletonEntity entity ) { - return ((ISpecialMob) entity).getSpecialData().getTexture(); - } - - @Override - protected void scale( AbstractSkeletonEntity entity, MatrixStack matrixStack, float partialTick ) { - super.scale( entity, matrixStack, partialTick ); - - final float scale = ((ISpecialMob) entity).getSpecialData().getRenderScale(); - shadowRadius = baseShadowRadius * scale; - matrixStack.scale( scale, scale, scale ); - } } \ No newline at end of file diff --git a/src/main/java/fathertoast/specialmobs/common/entity/ai/INinja.java b/src/main/java/fathertoast/specialmobs/common/entity/ai/INinja.java index fa97537..9520adb 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/ai/INinja.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/ai/INinja.java @@ -6,20 +6,20 @@ import javax.annotation.Nullable; /** * Monsters must implement this interface to use the ninja goal AI. - * This allows get and set methods for the disguise block and immobile state. + * This allows get and set methods for the disguise block and immovable state. */ public interface INinja { - /** @return Whether this ninja is currently immobile. */ - boolean isHiding(); + /** @return Whether this ninja is currently immovable. */ + boolean isCrouchingTiger(); /** Sets this ninja's immovable state. When activated, the entity is 'snapped' to the nearest block position. */ - void setHiding( boolean value ); + void setCrouchingTiger( boolean value ); /** @return The block being hidden (rendered) as, or null if not hiding. */ @Nullable - BlockState getDisguiseBlock(); + BlockState getHiddenDragon(); /** Sets the block being hidden (rendered) as, set to null to cancel hiding. */ - void setDisguiseBlock( @Nullable BlockState block ); + void setHiddenDragon( @Nullable BlockState block ); } \ No newline at end of file diff --git a/src/main/java/fathertoast/specialmobs/common/entity/ai/NinjaGoal.java b/src/main/java/fathertoast/specialmobs/common/entity/ai/NinjaGoal.java new file mode 100644 index 0000000..5b59019 --- /dev/null +++ b/src/main/java/fathertoast/specialmobs/common/entity/ai/NinjaGoal.java @@ -0,0 +1,186 @@ +package fathertoast.specialmobs.common.entity.ai; + +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.entity.MobEntity; +import net.minecraft.entity.ai.goal.Goal; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; +import java.util.Random; + +/** + * This AI goal tells the ninja when players are looking in its direction so it can 'freeze' in place and act like a block. + *

+ * It also contains static methods to help ninjas choose a block to disguise as. + */ +public class NinjaGoal extends Goal { + + private final T ninja; + + public NinjaGoal( T entity ) { + ninja = entity; + setFlags( EnumSet.of( Goal.Flag.MOVE, Flag.LOOK, Goal.Flag.JUMP ) ); + } + + /** @return Returns true if this AI can be activated. */ + @Override + public boolean canUse() { + if( ninja.getHiddenDragon() == null || ninja.getHiddenDragon().getRenderShape() != BlockRenderType.MODEL ) + return false; + + final List players = new ArrayList<>( ninja.level.players() ); + for( PlayerEntity player : players ) { + final float dX = (float) (ninja.getX() - player.getX()); + final float dZ = (float) (ninja.getZ() - player.getZ()); + final float angleFromPlayer = (float) Math.atan2( dX, -dZ ) * 180.0F / (float) Math.PI; + + if( Math.abs( angleFromPlayer - MathHelper.wrapDegrees( player.yHeadRot ) ) > 90.0F ) { + return true; // A player is looking in the ninja's general direction! + } + } + return false; + } + + /** Called when this AI is activated. */ + @Override + public void start() { + ninja.getNavigation().stop(); + ninja.clearFire(); + ninja.moveTo( Math.floor( ninja.getX() ) + 0.5, Math.floor( ninja.getY() ), Math.floor( ninja.getZ() ) + 0.5 ); + ninja.setDeltaMovement( 0.0, 0.0, 0.0 ); + + ninja.setCrouchingTiger( true ); + } + + /** @return Called each update while active and returns true if this AI can remain active. */ + @Override + public boolean canContinueToUse() { return canUse(); } + + /** @return Whether this AI can be interrupted by a lower priority AI while running. */ + @Override + public boolean isInterruptable() { return false; } + + /** Called when this AI is deactivated. */ + @Override + public void stop() { ninja.setCrouchingTiger( false ); } + + + //--------------- Static Disguise Helper ---------------- + + /** Finds a nearby block for the entity to hide as and flags it to start hiding. */ + public static BlockState pickDisguise( T entity ) { + final Random random = entity.getRandom(); + + // Options available regardless of position + switch( random.nextInt( 200 ) ) { + case 0: return Blocks.CHEST.defaultBlockState().setValue( BlockStateProperties.HORIZONTAL_FACING, + Direction.Plane.HORIZONTAL.getRandomDirection( random ) ); + case 1: return Blocks.OAK_LOG.defaultBlockState(); + case 2: return Blocks.SPONGE.defaultBlockState(); + case 3: return Blocks.DEAD_BUSH.defaultBlockState(); + case 4: return Blocks.OAK_LEAVES.defaultBlockState(); + case 5: return Blocks.BEE_NEST.defaultBlockState(); + case 6: return Blocks.CAKE.defaultBlockState(); + case 7: return Blocks.CRAFTING_TABLE.defaultBlockState(); + case 8: return Blocks.FURNACE.defaultBlockState(); + case 9: return Blocks.ANVIL.defaultBlockState(); + case 10: return Blocks.BREWING_STAND.defaultBlockState(); + } + + final BlockPos posUnderFeet = entity.blockPosition().below(); + final BlockState blockUnderFeet = entity.level.getBlockState( posUnderFeet ); + if( !blockUnderFeet.getBlock().isAir( blockUnderFeet, entity.level, posUnderFeet ) ) { + // Options available based on the block we are standing on + + if( blockUnderFeet.is( Blocks.STONE ) || blockUnderFeet.is( Blocks.STONE_BRICKS ) ) { + // Cave theme + switch( random.nextInt( 30 ) ) { + case 0: return blockUnderFeet; + case 1: return Blocks.MOSSY_COBBLESTONE.defaultBlockState(); + case 2: return Blocks.CLAY.defaultBlockState(); + case 3: return Blocks.GRAVEL.defaultBlockState(); + case 4: return Blocks.COAL_ORE.defaultBlockState(); + case 5: return Blocks.IRON_ORE.defaultBlockState(); + case 6: return Blocks.LAPIS_ORE.defaultBlockState(); + case 7: return Blocks.GOLD_ORE.defaultBlockState(); + case 8: return Blocks.REDSTONE_ORE.defaultBlockState(); + case 9: return Blocks.DIAMOND_ORE.defaultBlockState(); + case 10: return Blocks.EMERALD_ORE.defaultBlockState(); + } + } + else if( blockUnderFeet.is( Blocks.GRASS ) || blockUnderFeet.is( Blocks.DIRT ) || blockUnderFeet.is( Blocks.PODZOL ) ) { + // Field theme + switch( random.nextInt( 15 ) ) { + case 0: return blockUnderFeet; + case 1: return Blocks.OAK_LOG.defaultBlockState(); + case 2: return Blocks.OAK_LEAVES.defaultBlockState(); + case 3: return Blocks.PUMPKIN.defaultBlockState(); + case 4: return Blocks.MELON.defaultBlockState(); + case 5: return Blocks.TALL_GRASS.defaultBlockState(); + case 6: return Blocks.FERN.defaultBlockState(); + case 7: return Blocks.BEE_NEST.defaultBlockState(); + } + } + else if( blockUnderFeet.is( Blocks.SAND ) || blockUnderFeet.is( Blocks.RED_SAND ) || + blockUnderFeet.is( Blocks.SANDSTONE ) || blockUnderFeet.is( Blocks.RED_SANDSTONE ) ) { + // Desert theme + switch( random.nextInt( 5 ) ) { + case 0: return blockUnderFeet; + case 1: return Blocks.CACTUS.defaultBlockState(); + case 2: return Blocks.DEAD_BUSH.defaultBlockState(); + } + } + else if( blockUnderFeet.is( Blocks.NETHERRACK ) || blockUnderFeet.is( Blocks.NETHER_BRICKS ) || + blockUnderFeet.is( Blocks.SOUL_SAND ) || blockUnderFeet.is( Blocks.SOUL_SOIL ) || + blockUnderFeet.is( Blocks.CRIMSON_NYLIUM ) || blockUnderFeet.is( Blocks.WARPED_NYLIUM ) ) { + // Nether theme + switch( random.nextInt( 25 ) ) { + case 0: return blockUnderFeet; + case 1: return Blocks.GRAVEL.defaultBlockState(); + case 2: return Blocks.SOUL_SAND.defaultBlockState(); + case 3: return Blocks.GLOWSTONE.defaultBlockState(); + case 4: return Blocks.NETHER_QUARTZ_ORE.defaultBlockState(); + case 5: return Blocks.NETHER_GOLD_ORE.defaultBlockState(); + case 6: return Blocks.ANCIENT_DEBRIS.defaultBlockState(); + case 7: return Blocks.BROWN_MUSHROOM.defaultBlockState(); + case 8: return Blocks.RED_MUSHROOM.defaultBlockState(); + case 9: return Blocks.CRIMSON_STEM.defaultBlockState(); + case 10: return Blocks.WARPED_STEM.defaultBlockState(); + } + } + else if( blockUnderFeet.is( Blocks.END_STONE ) || blockUnderFeet.is( Blocks.END_STONE_BRICKS ) || + blockUnderFeet.is( Blocks.PURPUR_BLOCK ) ) { + // End theme + switch( random.nextInt( 10 ) ) { + case 0: return blockUnderFeet; + case 1: return Blocks.CHORUS_PLANT.defaultBlockState(); + case 2: return Blocks.PURPUR_PILLAR.defaultBlockState(); + case 3: return Blocks.END_ROD.defaultBlockState(); + } + } + } + + // Pick a random nearby render-able block + final BlockPos.Mutable randPos = new BlockPos.Mutable(); + for( int i = 0; i < 16; i++ ) { + randPos.set( + posUnderFeet.getX() + random.nextInt( 17 ) - 8, + posUnderFeet.getY() + random.nextInt( 5 ) - 2, + posUnderFeet.getZ() + random.nextInt( 17 ) - 8 ); + + final BlockState randBlock = entity.level.getBlockState( randPos ); + if( randBlock.getRenderShape() == BlockRenderType.MODEL ) return randBlock; + } + + // Hide as a log if none of the other options are chosen + return Blocks.OAK_LOG.defaultBlockState(); + } +} \ No newline at end of file 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 385d563..f6cd93d 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/skeleton/NinjaSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/skeleton/NinjaSkeletonEntity.java @@ -3,7 +3,9 @@ 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.entity.ai.INinja; +import fathertoast.specialmobs.common.entity.ai.NinjaGoal; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; import fathertoast.specialmobs.datagen.loot.LootTableBuilder; @@ -19,10 +21,13 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.network.datasync.DataParameter; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; import net.minecraft.util.ActionResultType; import net.minecraft.util.DamageSource; import net.minecraft.util.Hand; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.World; @@ -78,8 +83,7 @@ public class NinjaSkeletonEntity extends _SpecialSkeletonEntity implements INinj @Override protected void registerVariantGoals() { setRangedAI( 1.0, 10, 9.0F ); - - //TODO AIHelper.insertGoalReverse( goalSelector, getVariantAttackPriority() - 1, null ); + goalSelector.addGoal( -9, new NinjaGoal<>( this ) ); } /** Called during spawn finalization to set starting equipment. */ @@ -95,15 +99,13 @@ public class NinjaSkeletonEntity extends _SpecialSkeletonEntity implements INinj /** Override to apply effects when this entity hits a target with a melee attack. */ @Override - protected void onVariantAttack( Entity target ) { - revealTo( target ); - } + protected void onVariantAttack( Entity target ) { revealTo( target, true ); } /** @return Attempts to damage this entity; returns true if the hit was successful. */ @Override public boolean hurt( DamageSource source, float amount ) { if( super.hurt( source, amount ) ) { - revealTo( source.getEntity() ); + revealTo( source.getEntity(), false ); return true; } return false; @@ -113,21 +115,25 @@ public class NinjaSkeletonEntity extends _SpecialSkeletonEntity implements INinj @Override public ActionResultType mobInteract( PlayerEntity player, Hand hand ) { // Attack if the player tries to right click the "block" - if( !level.isClientSide() && getDisguiseBlock() != null ) revealTo( player ); + if( !level.isClientSide() && getHiddenDragon() != null ) revealTo( player, true ); return super.mobInteract( player, hand ); } + /** Called by the player when it touches this entity. */ + @Override + public void playerTouch( PlayerEntity player ) { + if( !level.isClientSide() && getHiddenDragon() != null && !player.isCreative() ) revealTo( player, true ); + super.playerTouch( player ); + } + /** Called each tick to update this entity. */ @Override public void tick() { - // TODO can this be moved to the ninja AI? if( !level.isClientSide() ) { if( canHide ) { - //EntityAINinja.startHiding( this ); TODO - this.setHiding( true ); - this.setDisguiseBlock( Blocks.DIRT.defaultBlockState() ); + setHiddenDragon( NinjaGoal.pickDisguise( this ) ); } - else if( onGround && getDisguiseBlock() == null && + else if( onGround && getHiddenDragon() == null && (getTarget() == null || getTarget() instanceof PlayerEntity && ((PlayerEntity) getTarget()).isCreative()) ) { canHide = true; } @@ -135,33 +141,48 @@ public class NinjaSkeletonEntity extends _SpecialSkeletonEntity implements INinj super.tick(); } - // // Moves this entity. - // @Override TODO - // public void move( MoverType type, double x, double y, double z ) { - // if( isHiding() && type != MoverType.PISTON ) { - // motionY = 0.0; - // } - // else { - // super.move( type, x, y, z ); - // } - // } + /** Moves this entity to a new position and rotation. */ + @Override + public void moveTo( double x, double y, double z, float yaw, float pitch ) { + if( !isCrouchingTiger() ) super.moveTo( x, y, z, yaw, pitch ); + } + + /** Sets this entity's movement. */ + @Override + public void setDeltaMovement( Vector3d vec ) { + if( !isCrouchingTiger() ) super.setDeltaMovement( vec ); + } /** Returns true if this entity should push and be pushed by other entities when colliding. */ @Override public boolean isPushable() { - return super.isPushable() && !isHiding(); + return super.isPushable() && !isCrouchingTiger(); } /** Sets this entity on fire for a specific duration. */ @Override public void setRemainingFireTicks( int ticks ) { - if( !isHiding() ) super.setRemainingFireTicks( ticks ); + if( !isCrouchingTiger() ) super.setRemainingFireTicks( ticks ); } /** Reveals this ninja and sets its target so that it doesn't immediately re-disguise itself. */ - public void revealTo( @Nullable Entity target ) { - setDisguiseBlock( null ); - if( target instanceof LivingEntity ) setTarget( (LivingEntity) target ); + public void revealTo( @Nullable Entity target, boolean ambush ) { + if( getHiddenDragon() == null ) return; + setHiddenDragon( null ); + + if( target instanceof LivingEntity && !(target instanceof PlayerEntity && ((PlayerEntity) target).isCreative()) ) { + final LivingEntity livingTarget = (LivingEntity) target; + setTarget( livingTarget ); + + if( ambush ) { + final int duration = MobHelper.getDebuffDuration( level.getDifficulty() ); + + livingTarget.addEffect( new EffectInstance( Effects.POISON, duration ) ); + livingTarget.addEffect( new EffectInstance( Effects.MOVEMENT_SLOWDOWN, duration ) ); + livingTarget.addEffect( new EffectInstance( Effects.BLINDNESS, duration ) ); + livingTarget.removeEffect( Effects.NIGHT_VISION ); // Prevent blind + night vision combo (black screen) + } + } } private static final ResourceLocation[] TEXTURES = { @@ -194,37 +215,31 @@ public class NinjaSkeletonEntity extends _SpecialSkeletonEntity implements INinj /** @return Whether this ninja is currently immobile. */ @Override - public boolean isHiding() { return getEntityData().get( IS_HIDING ); } + public boolean isCrouchingTiger() { return getEntityData().get( IS_HIDING ); } /** Sets this ninja's immovable state. When activated, the entity is 'snapped' to the nearest block position. */ @Override - public void setHiding( boolean value ) { - if( value != isHiding() ) { + public void setCrouchingTiger( boolean value ) { + if( value != isCrouchingTiger() ) { getEntityData().set( IS_HIDING, value ); - if( value ) { - clearFire(); - moveTo( Math.floor( getX() ) + 0.5, Math.floor( getY() ), Math.floor( getZ() ) + 0.5 ); - } } } /** @return The block being hidden (rendered) as, or null if not hiding. */ @Nullable @Override - public BlockState getDisguiseBlock() { + public BlockState getHiddenDragon() { if( isAlive() ) return getEntityData().get( HIDING_BLOCK ).orElse( null ); return null; } /** Sets the block being hidden (rendered) as, set to null to cancel hiding. */ @Override - public void setDisguiseBlock( @Nullable BlockState block ) { + public void setHiddenDragon( @Nullable BlockState block ) { getEntityData().set( HIDING_BLOCK, Optional.ofNullable( block ) ); canHide = false; // Smoke puff when emerging from disguise - if( block == null ) { - //spawnExplosionParticle(); TODO - } + if( block == null ) spawnAnim(); } } \ No newline at end of file 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 dd13624..fa492e3 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/NinjaWitherSkeletonEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/witherskeleton/NinjaWitherSkeletonEntity.java @@ -3,7 +3,9 @@ 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.entity.ai.INinja; +import fathertoast.specialmobs.common.entity.ai.NinjaGoal; import fathertoast.specialmobs.common.util.AttributeHelper; import fathertoast.specialmobs.common.util.References; import fathertoast.specialmobs.datagen.loot.LootTableBuilder; @@ -19,10 +21,13 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.network.datasync.DataParameter; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; import net.minecraft.util.ActionResultType; import net.minecraft.util.DamageSource; import net.minecraft.util.Hand; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.World; @@ -78,8 +83,7 @@ public class NinjaWitherSkeletonEntity extends _SpecialWitherSkeletonEntity impl @Override protected void registerVariantGoals() { setRangedAI( 1.0, 10, 9.0F ); - - //TODO AIHelper.insertGoalReverse( goalSelector, getVariantAttackPriority() - 1, null ); + goalSelector.addGoal( -9, new NinjaGoal<>( this ) ); } /** Called during spawn finalization to set starting equipment. */ @@ -95,15 +99,13 @@ public class NinjaWitherSkeletonEntity extends _SpecialWitherSkeletonEntity impl /** Override to apply effects when this entity hits a target with a melee attack. */ @Override - protected void onVariantAttack( Entity target ) { - revealTo( target ); - } + protected void onVariantAttack( Entity target ) { revealTo( target, true ); } /** @return Attempts to damage this entity; returns true if the hit was successful. */ @Override public boolean hurt( DamageSource source, float amount ) { if( super.hurt( source, amount ) ) { - revealTo( source.getEntity() ); + revealTo( source.getEntity(), false ); return true; } return false; @@ -113,19 +115,25 @@ public class NinjaWitherSkeletonEntity extends _SpecialWitherSkeletonEntity impl @Override public ActionResultType mobInteract( PlayerEntity player, Hand hand ) { // Attack if the player tries to right click the "block" - if( !level.isClientSide() && getDisguiseBlock() != null ) revealTo( player ); + if( !level.isClientSide() && getHiddenDragon() != null ) revealTo( player, true ); return super.mobInteract( player, hand ); } + /** Called by the player when it touches this entity. */ + @Override + public void playerTouch( PlayerEntity player ) { + if( !level.isClientSide() && getHiddenDragon() != null && !player.isCreative() ) revealTo( player, true ); + super.playerTouch( player ); + } + /** Called each tick to update this entity. */ @Override public void tick() { - // TODO can this be moved to the ninja AI? if( !level.isClientSide() ) { if( canHide ) { - //EntityAINinja.startHiding( this ); TODO + setHiddenDragon( NinjaGoal.pickDisguise( this ) ); } - else if( onGround && getDisguiseBlock() == null && + else if( onGround && getHiddenDragon() == null && (getTarget() == null || getTarget() instanceof PlayerEntity && ((PlayerEntity) getTarget()).isCreative()) ) { canHide = true; } @@ -133,31 +141,48 @@ public class NinjaWitherSkeletonEntity extends _SpecialWitherSkeletonEntity impl super.tick(); } - // // Moves this entity. - // @Override TODO - // public void move( MoverType type, double x, double y, double z ) { - // if( isHiding() && type != MoverType.PISTON ) { - // motionY = 0.0; - // } - // else { - // super.move( type, x, y, z ); - // } - // } - // - // // Returns true if this entity should push and be pushed by other entities when colliding. - // @Override - // public boolean canBePushed() { return !isHiding(); } + /** Moves this entity to a new position and rotation. */ + @Override + public void moveTo( double x, double y, double z, float yaw, float pitch ) { + if( !isCrouchingTiger() ) super.moveTo( x, y, z, yaw, pitch ); + } + + /** Sets this entity's movement. */ + @Override + public void setDeltaMovement( Vector3d vec ) { + if( !isCrouchingTiger() ) super.setDeltaMovement( vec ); + } + + /** Returns true if this entity should push and be pushed by other entities when colliding. */ + @Override + public boolean isPushable() { + return super.isPushable() && !isCrouchingTiger(); + } /** Sets this entity on fire for a specific duration. */ @Override public void setRemainingFireTicks( int ticks ) { - if( !isHiding() ) super.setRemainingFireTicks( ticks ); + if( !isCrouchingTiger() ) super.setRemainingFireTicks( ticks ); } /** Reveals this ninja and sets its target so that it doesn't immediately re-disguise itself. */ - public void revealTo( @Nullable Entity target ) { - setDisguiseBlock( null ); - if( target instanceof LivingEntity ) setTarget( (LivingEntity) target ); + public void revealTo( @Nullable Entity target, boolean ambush ) { + if( getHiddenDragon() == null ) return; + setHiddenDragon( null ); + + if( target instanceof LivingEntity && !(target instanceof PlayerEntity && ((PlayerEntity) target).isCreative()) ) { + final LivingEntity livingTarget = (LivingEntity) target; + setTarget( livingTarget ); + + if( ambush ) { + final int duration = MobHelper.getDebuffDuration( level.getDifficulty() ); + + livingTarget.addEffect( new EffectInstance( Effects.POISON, duration ) ); + livingTarget.addEffect( new EffectInstance( Effects.MOVEMENT_SLOWDOWN, duration ) ); + livingTarget.addEffect( new EffectInstance( Effects.BLINDNESS, duration ) ); + livingTarget.removeEffect( Effects.NIGHT_VISION ); // Prevent blind + night vision combo (black screen) + } + } } private static final ResourceLocation[] TEXTURES = { @@ -190,37 +215,31 @@ public class NinjaWitherSkeletonEntity extends _SpecialWitherSkeletonEntity impl /** @return Whether this ninja is currently immobile. */ @Override - public boolean isHiding() { return getEntityData().get( IS_HIDING ); } + public boolean isCrouchingTiger() { return getEntityData().get( IS_HIDING ); } /** Sets this ninja's immovable state. When activated, the entity is 'snapped' to the nearest block position. */ @Override - public void setHiding( boolean value ) { - if( value != isHiding() ) { + public void setCrouchingTiger( boolean value ) { + if( value != isCrouchingTiger() ) { getEntityData().set( IS_HIDING, value ); - if( value ) { - clearFire(); - moveTo( Math.floor( getX() ) + 0.5, Math.floor( getY() ), Math.floor( getZ() ) + 0.5 ); - } } } /** @return The block being hidden (rendered) as, or null if not hiding. */ @Nullable @Override - public BlockState getDisguiseBlock() { + public BlockState getHiddenDragon() { if( isAlive() ) return getEntityData().get( HIDING_BLOCK ).orElse( null ); return null; } /** Sets the block being hidden (rendered) as, set to null to cancel hiding. */ @Override - public void setDisguiseBlock( @Nullable BlockState block ) { + public void setHiddenDragon( @Nullable BlockState block ) { getEntityData().set( HIDING_BLOCK, Optional.ofNullable( block ) ); canHide = false; // Smoke puff when emerging from disguise - if( block == null ) { - //spawnExplosionParticle(); TODO - } + if( block == null ) spawnAnim(); } } \ No newline at end of file From de5bf4293a4407f211e2fa665502b508dd05bdb7 Mon Sep 17 00:00:00 2001 From: FatherToast Date: Tue, 28 Jun 2022 14:09:04 -0500 Subject: [PATCH 3/4] cute fx --- .../common/entity/cavespider/MotherCaveSpiderEntity.java | 2 ++ .../common/entity/creeper/SplittingCreeperEntity.java | 1 + .../common/entity/enderman/MirageEndermanEntity.java | 1 + .../specialmobs/common/entity/spider/MotherSpiderEntity.java | 2 ++ 4 files changed, 6 insertions(+) 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 89e6b3d..d9468af 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/cavespider/MotherCaveSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/cavespider/MotherCaveSpiderEntity.java @@ -94,6 +94,7 @@ public class MotherCaveSpiderEntity extends _SpecialCaveSpiderEntity { if( extraBabies > 0 && amount > 1.0F && level instanceof IServerWorld && random.nextFloat() < 0.33F ) { extraBabies--; spawnBaby( 0.66F, null ); + spawnAnim(); playSound( SoundEvents.EGG_THROW, 1.0F, 2.0F / (random.nextFloat() * 0.4F + 0.8F) ); } return true; @@ -112,6 +113,7 @@ public class MotherCaveSpiderEntity extends _SpecialCaveSpiderEntity { for( int i = 0; i < babiesToSpawn; i++ ) { groupData = spawnBaby( 0.33F, groupData ); } + spawnAnim(); playSound( SoundEvents.EGG_THROW, 1.0F, 2.0F / (random.nextFloat() * 0.4F + 0.8F) ); } super.remove( keepData ); 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 189e489..b5c7c65 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/creeper/SplittingCreeperEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/creeper/SplittingCreeperEntity.java @@ -87,6 +87,7 @@ public class SplittingCreeperEntity extends _SpecialCreeperEntity { for( int i = 0; i < babiesToSpawn; i++ ) { groupData = spawnBaby( explosionPower / 3.0F, groupData ); } + spawnAnim(); playSound( SoundEvents.EGG_THROW, 1.0F, 2.0F / (random.nextFloat() * 0.4F + 0.8F) ); } 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 f1ab276..932331b 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/enderman/MirageEndermanEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/enderman/MirageEndermanEntity.java @@ -89,6 +89,7 @@ public class MirageEndermanEntity extends _SpecialEndermanEntity { @Override public void tick() { if( isFake && tickCount >= 200 ) { + spawnAnim(); remove(); } super.tick(); 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 7f3bedf..688de24 100644 --- a/src/main/java/fathertoast/specialmobs/common/entity/spider/MotherSpiderEntity.java +++ b/src/main/java/fathertoast/specialmobs/common/entity/spider/MotherSpiderEntity.java @@ -94,6 +94,7 @@ public class MotherSpiderEntity extends _SpecialSpiderEntity { if( extraBabies > 0 && amount > 1.0F && level instanceof IServerWorld && random.nextFloat() < 0.33F ) { extraBabies--; spawnBaby( 0.66F, null ); + spawnAnim(); playSound( SoundEvents.EGG_THROW, 1.0F, 2.0F / (random.nextFloat() * 0.4F + 0.8F) ); } return true; @@ -112,6 +113,7 @@ public class MotherSpiderEntity extends _SpecialSpiderEntity { for( int i = 0; i < babiesToSpawn; i++ ) { groupData = spawnBaby( 0.33F, groupData ); } + spawnAnim(); playSound( SoundEvents.EGG_THROW, 1.0F, 2.0F / (random.nextFloat() * 0.4F + 0.8F) ); } super.remove( keepData ); From 434a91477fba6926c7ff098d65268c727d630f16 Mon Sep 17 00:00:00 2001 From: FatherToast Date: Tue, 28 Jun 2022 15:42:15 -0500 Subject: [PATCH 4/4] Tutta's creepers! --- .../common/bestiary/MobFamily.java | 1 + .../specialmobs/common/core/SpecialMobs.java | 11 ++++++----- .../textures/entity/creeper/Skeleton.png | Bin 0 -> 1687 bytes .../textures/entity/creeper/dark.png | Bin 2494 -> 2508 bytes .../textures/entity/creeper/dark_eyes.png | Bin 244 -> 261 bytes .../textures/entity/creeper/death.png | Bin 5494 -> 3011 bytes .../textures/entity/creeper/death_eyes.png | Bin 8120 -> 117 bytes .../textures/entity/creeper/dirt.png | Bin 6222 -> 2473 bytes .../textures/entity/creeper/doom.png | Bin 8114 -> 2680 bytes .../textures/entity/creeper/doom_overlay.png | Bin 8812 -> 438 bytes .../textures/entityNEW/creeper/Skeleton.png | Bin 0 -> 1687 bytes .../textures/entityNEW/creeper/dark.png | Bin 2494 -> 2508 bytes .../textures/entityNEW/creeper/dark_eyes.png | Bin 244 -> 261 bytes .../textures/entityNEW/creeper/death.png | Bin 0 -> 3011 bytes .../textures/entityNEW/creeper/death_eyes.png | Bin 0 -> 117 bytes .../textures/entityNEW/creeper/dirt.png | Bin 0 -> 2473 bytes .../textures/entityNEW/creeper/doom.png | Bin 0 -> 2680 bytes .../entityNEW/creeper/doom_overlay.png | Bin 0 -> 438 bytes 18 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/assets/specialmobs/textures/entity/creeper/Skeleton.png create mode 100644 src/main/resources/assets/specialmobs/textures/entityNEW/creeper/Skeleton.png create mode 100644 src/main/resources/assets/specialmobs/textures/entityNEW/creeper/death.png create mode 100644 src/main/resources/assets/specialmobs/textures/entityNEW/creeper/death_eyes.png create mode 100644 src/main/resources/assets/specialmobs/textures/entityNEW/creeper/dirt.png create mode 100644 src/main/resources/assets/specialmobs/textures/entityNEW/creeper/doom.png create mode 100644 src/main/resources/assets/specialmobs/textures/entityNEW/creeper/doom_overlay.png diff --git a/src/main/java/fathertoast/specialmobs/common/bestiary/MobFamily.java b/src/main/java/fathertoast/specialmobs/common/bestiary/MobFamily.java index 1a5a25b..97d11d6 100644 --- a/src/main/java/fathertoast/specialmobs/common/bestiary/MobFamily.java +++ b/src/main/java/fathertoast/specialmobs/common/bestiary/MobFamily.java @@ -47,6 +47,7 @@ public class MobFamily { "Zombie", "zombies", 0x00AFAF, new EntityType[] { EntityType.ZOMBIE, EntityType.HUSK }, "Brute", "Fire", /*"Fishing",*/ "Giant", "Hungry", "Husk", "MadScientist", "Plague" ); + // TODO Drowned family and zombie transform mechanic public static final MobFamily ZOMBIFIED_PIGLIN = new MobFamily<>(//TODO figure out crossbows "ZombifiedPiglin", "zombified piglins", 0xEA9393, new EntityType[] { EntityType.ZOMBIFIED_PIGLIN }, "Brute", /*"Fishing",*/ "Giant", "Hungry", "Knight", "Plague", "Vampire" diff --git a/src/main/java/fathertoast/specialmobs/common/core/SpecialMobs.java b/src/main/java/fathertoast/specialmobs/common/core/SpecialMobs.java index df1d6f6..4852b3e 100644 --- a/src/main/java/fathertoast/specialmobs/common/core/SpecialMobs.java +++ b/src/main/java/fathertoast/specialmobs/common/core/SpecialMobs.java @@ -48,10 +48,10 @@ public class SpecialMobs { * + transformations * - ranged attack AI (using bow) * - use shields - * + drowned - * o zombified piglins - * o ranged attack AI (using bow) - * o use shields + * + drowned + * - zombified piglins + * - ranged attack AI (using bow) + * - use shields * - skeletons * - use shields * - babies @@ -60,7 +60,7 @@ public class SpecialMobs { * - babies * - slimes * - smallest size can deal damage - * o magma cubes + * - magma cubes * - spiders * o ranged attack AI * - cave spiders @@ -80,6 +80,7 @@ public class SpecialMobs { * ? zoglins * ? endermites * ? guardians + * ? vortex * ? shulkers * ? phantoms * + the goat diff --git a/src/main/resources/assets/specialmobs/textures/entity/creeper/Skeleton.png b/src/main/resources/assets/specialmobs/textures/entity/creeper/Skeleton.png new file mode 100644 index 0000000000000000000000000000000000000000..09863cc7e90a8a9e5b09d1de515b6ba424aa021b GIT binary patch literal 1687 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 delta 2463 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 diff --git a/src/main/resources/assets/specialmobs/textures/entity/creeper/dark_eyes.png b/src/main/resources/assets/specialmobs/textures/entity/creeper/dark_eyes.png index 9c27ac0ebc7b789d618c784b0e3fabb531cc4bca..58b737728bf7ee6e8919d7b420f942ce0a32a3e9 100644 GIT binary patch delta 212 zcmV;_04x9W0fhpPIe)iFL_t(&f$i3@4Z|Q11<+4+a7rfd0PH~T)lz2&GD8ON0;Yt_ zkV_TImZAtdX9+w1RZ#FHPA3k4{+rPXO2J9fS^z-qBhLP=mc6BuW|&wHv0gKBb7}=> zS_>1yxZVr30^~jd03Nr?xF#Yx1Q|M!p_A!81t;ImeDaj*EKR2dMN=U6aW>z@`c#8;FOxc19%7ZUM+QoATwkD7BHpp z3{k51>?TJc7vTRYDEN2i4hev+t@8?6!f5><0Dv45?)rAiKGV%J%tT?Lo{^_>D?mR8 zx)io`E!+x_V*&uIugA6~B5H!oli57ke!qm#{++2s(Gi0$jir`ho{hj x;*Zep;wFmLicnPuC|Qdo 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 literal 5494 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 rZUKYY9U~whNQYG}- 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 diff --git a/src/main/resources/assets/specialmobs/textures/entity/creeper/doom.png b/src/main/resources/assets/specialmobs/textures/entity/creeper/doom.png index 1b6ec6c3bc26664f1a7380b818349558b23dd54b..5f6dff9e98d9fe45ba2b93d7028c52950a272b20 100644 GIT binary patch delta 2672 zcmV-$3Xk=&Kll`oBYyx1a7bBm000XU000XU0RWnu7ytkYDoI2^RA_hr{_Lvd&cAO7;C*Gn-x3|K;j+28~gz%|51cQc;O8m5hRF>Ad6N>R%AEv z+B2S;$KBKS>glTLuKR_DwhWQOj*(|Fe4biWr|SH^-*f7m-+%eFz!m((U;cU4>2%oH zc|e*bh&h?bWWeOo!Z4~NNsM8vV_7{Q$7JGg_wGGpNg;}2zW@Ed7Ov{!Hp#tPGXc+= z;dxX1zj;1$Ak{HkPSzFzvP|$g>`-nJ62!e@aGWU@7aaha#yVn71Yj^6 zLzKLXBuO_L{WWl9g!gy$7?1t~O;^dQi{_fH;@Cc(A8~SeM8DSq zK-UV`j?dJbGd1VvTJdJ1zXq7I7{tgr91fk4BH-&rYWP* zlu!TlC%3v)-m`-P;Y0B#AGOq7ZEPrZ5amaXR^X%CX<&wd{;V*gi>86ArJQ+5d;yv{ssT?qkrTl|Nd|E`WM7;!p8dg zZE6QVn$Laq_dg^G=WK3lBII%$9Umd)1ZtIx+05ekvm*eGPo6U|7m3jGXGc8P-6jYV z_J1Ef!I@1_)dFD@aCCf(Eazw%A(lO2H11=LoHv~g`xZ%(B8s=aNJ>qkjx0&^`#o~G z9Mx)z{k=zop$CG%U^qh4G`6?z@WX%p6o4mB9&>zr#%%7=YSj@%5!bt9ZDoy0Wtkvw zkrjnB$q)pAmDW1Yp<1Z`Ftx1L*8orf|9>{b14ypx5(IN{If-8X0^4!WHH|0=DVJ+R zQOuLyy-z`{ym@G;WuR4LqA13i+Enz2qFQ7&_t3Nq*PRkO35rrcl2m$wQ_PX`YqJ14 z?A&_@w0(YM0IaR9@vC1RqG=ic7o7`!=kYEV-G2)# z$LGb-Q|k39k|?4m3SktHCMngbMjQpmQi(C-e}~79KE`!z3WX}3XLH_u#nk!| ztz2YdV+Y^&kYp8EQApAR5GWQ@a({w~BuY%D{o7R!NR38~LZL#bRH0nb0T_*YsQEId zXGgSJF5QbBnx?U}wF zQADG@gd{0Q;*eIWj;d<6sU2A4HowMq|M2&+yLa!BWf^B@XY_j`noBh%6Mu{O%;n|F z_BZa^fAq({pFP_D2-llaP)l^Xrx?aEX_g=e5^)sZ`wp6BFq@C@ynsrjK^V;O1D}8R z`+xea<^^wMf=@pD4yUK593LO?8d+4U8lE?& zUNgw$M24dtjm8p_$%u@Mdaa3Vn+SqHMQ@M+^SRCC#9?pmF<*W4bDB#ArLx9+=Adgj zQ`>|rL)RM&`U4t91%J!3P!t)%Si^A^TXMNv;|G89cQ?8wNVYR3jze76r&y?v0a2I% zi~Szfs8w}JC7rJizG7o-i(aqKa%+jPIiS<&5(XY&6k}TfnUDY=%XuV8V(x~B=9Hd~TCr5rz@r>nhS@;-Dxuf1J*ByMF_6g2dM54rk{lm_wUl zQKO-;GXS8`s8T58X)Y}a9HXI0sifjK zE)(+*0Dsqw`S!QIMSqZDnl@nojfT#0YlEME@dd88=tq_pRi@327P@W#kk2awK}cDv zBFTAHvm4j{b|(0LLAC`yivjTJumK zT7PYs@#umyOPI~V>(Ka(yte`V>wP=$6U1D=U^t@rx(J%35de9$2)JBcTIkghVX(** zg3zO3RA^tc(e(;jn|Ba$0=DB3gdXc_H(xV+$3I8^cWlc>5TMyKI6v!BEJ}<9CYKX? zk=TS0mlGS?^3W><&d<6ShJhe}HMNOjfoa|Q`*^<1i{ob;zWACT^w_<>k8Qu(`Qv@K zma1gvM+`?j^h)84P(_gm!w5x@U;mcg+#8O1g#Kc7Se8kzCs9y!f^adL@=AeT?-j%0 e;5x$lM*a(=cn=B`ClQYT0000 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 M07*qoM6N<$f<<4xg#Z8m diff --git a/src/main/resources/assets/specialmobs/textures/entity/creeper/doom_overlay.png b/src/main/resources/assets/specialmobs/textures/entity/creeper/doom_overlay.png index ba7cde0e5f872f8a0f97af130b5549219285222c..42aae81e2dc5128e0d76bb3fa16046bd2d6c6c0e 100644 GIT binary patch delta 396 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 delta 2463 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 diff --git a/src/main/resources/assets/specialmobs/textures/entityNEW/creeper/dark_eyes.png b/src/main/resources/assets/specialmobs/textures/entityNEW/creeper/dark_eyes.png index 9c27ac0ebc7b789d618c784b0e3fabb531cc4bca..58b737728bf7ee6e8919d7b420f942ce0a32a3e9 100644 GIT binary patch delta 212 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 FV1i`IsIdS5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/specialmobs/textures/entityNEW/creeper/death_eyes.png b/src/main/resources/assets/specialmobs/textures/entityNEW/creeper/death_eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..f2c37bf6cc4bf3b390584e2502c68682caca61e1 GIT binary patch literal 117 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 nkXM*lPILS7+^-&+hr{_Lvd&cAO7;C*Gn-x3| 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