Posted October 2, 20205 yr Hi , everyone that's me again and today I've got an idea to create color variations for my mob. I looked for Parrot's renderer to make renderer for my mob , but when I tried to summon it - game crashed. Crash Report: ---- Minecraft Crash Report ---- // Why did you do that? Time: 02.10.20 21:48 Description: Rendering entity in world java.lang.ArrayIndexOutOfBoundsException: 3 at com.orca.owls.OwlRenderer.getEntityTexture(OwlRenderer.java:23) ~[main/:?] {re:classloading,pl:runtimedistcleaner:A} at com.orca.owls.OwlRenderer.getEntityTexture(OwlRenderer.java:11) ~[main/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.entity.LivingRenderer.func_230496_a_(LivingRenderer.java:136) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.entity.LivingRenderer.render(LivingRenderer.java:116) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.entity.MobRenderer.render(MobRenderer.java:40) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.entity.MobRenderer.render(MobRenderer.java:20) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.entity.EntityRendererManager.renderEntityStatic(EntityRendererManager.java:252) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.WorldRenderer.renderEntity(WorldRenderer.java:1219) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.WorldRenderer.updateCameraAndRender(WorldRenderer.java:1027) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.GameRenderer.renderWorld(GameRenderer.java:619) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.GameRenderer.updateCameraAndRender(GameRenderer.java:437) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:990) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.run(Minecraft.java:589) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.main.Main.main(Main.java:184) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A} at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_241] {} at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_241] {} at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_241] {} at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_241] {} at net.minecraftforge.userdev.FMLUserdevClientLaunchProvider.lambda$launchService$0(FMLUserdevClientLaunchProvider.java:52) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {} at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-7.0.1.jar:?] {} at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) [modlauncher-7.0.1.jar:?] {} at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72) [modlauncher-7.0.1.jar:?] {} at cpw.mods.modlauncher.Launcher.run(Launcher.java:81) [modlauncher-7.0.1.jar:?] {} at cpw.mods.modlauncher.Launcher.main(Launcher.java:65) [modlauncher-7.0.1.jar:?] {} at net.minecraftforge.userdev.LaunchTesting.main(LaunchTesting.java:105) [forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Stacktrace: at com.orca.owls.OwlRenderer.getEntityTexture(OwlRenderer.java:23) ~[?:?] {re:classloading,pl:runtimedistcleaner:A} at com.orca.owls.OwlRenderer.getEntityTexture(OwlRenderer.java:11) ~[?:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.entity.LivingRenderer.func_230496_a_(LivingRenderer.java:136) ~[?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.entity.LivingRenderer.render(LivingRenderer.java:116) ~[?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.entity.MobRenderer.render(MobRenderer.java:40) ~[?:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.entity.MobRenderer.render(MobRenderer.java:20) ~[?:?] {re:classloading,pl:runtimedistcleaner:A} -- Entity being rendered -- Details: Entity Type: owls:owl (com.orca.owls.OwlEntity) Entity ID: 757 Entity Name: Сова Entity's Exact location: -69.50, 71.00, -172.50 Entity's Block location: World: (-70,71,-173), Chunk: (at 10,4,3 in -5,-11; contains blocks -80,0,-176 to -65,255,-161), Region: (-1,-1; contains chunks -32,-32 to -1,-1, blocks -512,0,-512 to -1,255,-1) Entity's Momentum: 0.00, 0.00, 0.00 Entity's Passengers: [] Entity's Vehicle: ~~ERROR~~ NullPointerException: null -- Renderer details -- Details: Assigned renderer: com.orca.owls.OwlRenderer@20db19ff Location: 2.16,-0.62,2.02 - World: (2,-1,2), Chunk: (at 2,-1,2 in 0,0; contains blocks 0,0,0 to 15,255,15), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511) Rotation: 22.5 Delta: 0.84001863 Stacktrace: at net.minecraft.client.renderer.entity.EntityRendererManager.renderEntityStatic(EntityRendererManager.java:252) ~[?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.WorldRenderer.renderEntity(WorldRenderer.java:1219) ~[?:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.WorldRenderer.updateCameraAndRender(WorldRenderer.java:1027) ~[?:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.GameRenderer.renderWorld(GameRenderer.java:619) ~[?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} -- Affected level -- Details: All players: 1 total; [ClientPlayerEntity['Dev'/413, l='ClientLevel', x=-71.66, y=70.00, z=-174.52]] Chunk stats: Client Chunk Cache: 841, 445 Level dimension: minecraft:overworld Level spawn location: World: (-64,71,-176), Chunk: (at 0,4,0 in -4,-11; contains blocks -64,0,-176 to -49,255,-161), Region: (-1,-1; contains chunks -32,-32 to -1,-1, blocks -512,0,-512 to -1,255,-1) Level time: 166 game time, 166 day time Server brand: forge Server type: Integrated singleplayer server Stacktrace: at net.minecraft.client.world.ClientWorld.fillCrashReport(ClientWorld.java:465) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2047) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.run(Minecraft.java:605) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.main.Main.main(Main.java:184) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A} at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_241] {} at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_241] {} at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_241] {} at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_241] {} at net.minecraftforge.userdev.FMLUserdevClientLaunchProvider.lambda$launchService$0(FMLUserdevClientLaunchProvider.java:52) ~[forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {} at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-7.0.1.jar:?] {} at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) [modlauncher-7.0.1.jar:?] {} at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72) [modlauncher-7.0.1.jar:?] {} at cpw.mods.modlauncher.Launcher.run(Launcher.java:81) [modlauncher-7.0.1.jar:?] {} at cpw.mods.modlauncher.Launcher.main(Launcher.java:65) [modlauncher-7.0.1.jar:?] {} at net.minecraftforge.userdev.LaunchTesting.main(LaunchTesting.java:105) [forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar:?] {} -- System Details -- Details: Minecraft Version: 1.16.3 Minecraft Version ID: 1.16.3 Operating System: Windows 10 (amd64) version 10.0 Java Version: 1.8.0_241, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 567260440 bytes (540 MB) / 1126694912 bytes (1074 MB) up to 1776812032 bytes (1694 MB) CPUs: 8 JVM Flags: 1 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump ModLauncher: 7.0.1+78+master.e9771d8 ModLauncher launch target: fmluserdevclient ModLauncher naming: mcp ModLauncher services: /mixin-0.8.1.jar mixin PLUGINSERVICE /eventbus-3.0.3-service.jar eventbus PLUGINSERVICE /forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-launcher.jar object_holder_definalize PLUGINSERVICE /forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-launcher.jar runtime_enum_extender PLUGINSERVICE /accesstransformers-2.2.0-shadowed.jar accesstransformer PLUGINSERVICE /forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-launcher.jar capability_inject_definalize PLUGINSERVICE /forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-launcher.jar runtimedistcleaner PLUGINSERVICE /mixin-0.8.1.jar mixin TRANSFORMATIONSERVICE /forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-launcher.jar fml TRANSFORMATIONSERVICE FML: 34.1 Forge: net.minecraftforge:34.1.0 FML Language Providers: [email protected] minecraft@1 Mod List: client-extra.jar Minecraft {[email protected] DONE} forge-1.16.3-34.1.0_mapped_snapshot_20200514-1.16-recomp.jar Forge {[email protected] DONE} main Owls Mod {[email protected] DONE} Launched Version: MOD_DEV Backend library: LWJGL version 3.2.2 build 10 Backend API: AMD Radeon(TM) Vega 8 Graphics GL version 4.6.13560 Compatibility Profile Context 26.20.11030.4004, ATI Technologies Inc. GL Caps: Using framebuffer using OpenGL 3.0 Using VBOs: Yes Is Modded: Definitely; Client brand changed to 'forge' Type: Client (map_client.txt) Graphics mode: fancy Resource Packs: Current Language: Русский (Россия) CPU: 8x AMD Ryzen 5 3550H with Radeon Vega Mobile Gfx Mob's Renderer: package com.orca.owls; import net.minecraft.client.renderer.entity.EntityRendererManager; import net.minecraft.client.renderer.entity.MobRenderer; import net.minecraft.entity.passive.ParrotEntity; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.MathHelper; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) public class OwlRenderer extends MobRenderer<OwlEntity, OwlModel<OwlEntity>> { public static final ResourceLocation[] OWL_TEXTURES = new ResourceLocation[]{new ResourceLocation(OwlsMain.MOD_ID, "textures/owl_brown.png"), new ResourceLocation(OwlsMain.MOD_ID, "textures/owl_arctic.png")}; public OwlRenderer(EntityRendererManager renderManagerIn) { super(renderManagerIn, new OwlModel(), 0.3F); } /** * Returns the location of an entity's texture. */ public ResourceLocation getEntityTexture(OwlEntity entity) { return OWL_TEXTURES[entity.getVariant()]; } /** * Defines what float the third param in setRotationAngles of ModelBase is */ public float handleRotationFloat(ParrotEntity livingBase, float partialTicks) { float f = MathHelper.lerp(partialTicks, livingBase.oFlap, livingBase.flap); float f1 = MathHelper.lerp(partialTicks, livingBase.oFlapSpeed, livingBase.flapSpeed); return (MathHelper.sin(f) + 1.0F) * f1; } } Mob's AI: package com.orca.owls; import com.google.common.collect.Sets; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.entity.AgeableEntity; import net.minecraft.entity.Entity; import net.minecraft.entity.EntitySize; import net.minecraft.entity.EntityType; import net.minecraft.entity.ILivingEntityData; import net.minecraft.entity.MobEntity; import net.minecraft.entity.Pose; import net.minecraft.entity.SpawnReason; import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.entity.ai.controller.FlyingMovementController; import net.minecraft.entity.ai.goal.FollowMobGoal; import net.minecraft.entity.ai.goal.FollowOwnerGoal; import net.minecraft.entity.ai.goal.LandOnOwnersShoulderGoal; import net.minecraft.entity.ai.goal.LookAtGoal; import net.minecraft.entity.ai.goal.PanicGoal; import net.minecraft.entity.ai.goal.SitGoal; import net.minecraft.entity.ai.goal.SwimGoal; import net.minecraft.entity.ai.goal.WaterAvoidingRandomFlyingGoal; import net.minecraft.entity.passive.AnimalEntity; import net.minecraft.entity.passive.IFlyingAnimal; import net.minecraft.entity.passive.ParrotEntity; import net.minecraft.entity.passive.ShoulderRidingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.nbt.CompoundNBT; import net.minecraft.network.datasync.DataParameter; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.network.datasync.EntityDataManager; import net.minecraft.pathfinding.FlyingPathNavigator; import net.minecraft.pathfinding.PathNavigator; import net.minecraft.pathfinding.PathNodeType; import net.minecraft.potion.EffectInstance; import net.minecraft.potion.Effects; import net.minecraft.tags.BlockTags; import net.minecraft.util.ActionResultType; import net.minecraft.util.DamageSource; import net.minecraft.util.Hand; import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvents; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.IServerWorld; import net.minecraft.world.IWorld; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import javax.annotation.Nullable; import java.util.Random; import java.util.Set; public class OwlEntity extends ShoulderRidingEntity implements IFlyingAnimal { private static final DataParameter<Integer> VARIANT = EntityDataManager.createKey(ParrotEntity.class, DataSerializers.VARINT); private static final Item DEADLY_ITEM = Items.BONE; private static final Set<Item> TAME_ITEMS = Sets.newHashSet(Items.RABBIT); public float flap; public float flapSpeed; public float oFlapSpeed; public float oFlap; private float flapping = 1.0F; private boolean partyParrot; private BlockPos jukeboxPosition; public OwlEntity(EntityType<? extends OwlEntity> type, World worldIn) { super(type, worldIn); this.moveController = new FlyingMovementController(this, 10, false); this.setPathPriority(PathNodeType.DANGER_FIRE, -1.0F); this.setPathPriority(PathNodeType.DAMAGE_FIRE, -1.0F); this.setPathPriority(PathNodeType.COCOA, -1.0F); } @Nullable public ILivingEntityData onInitialSpawn(IServerWorld worldIn, DifficultyInstance difficultyIn, SpawnReason reason, @Nullable ILivingEntityData spawnDataIn, @Nullable CompoundNBT dataTag) { this.setVariant(this.rand.nextInt(5)); if (spawnDataIn == null) { spawnDataIn = new AgeableEntity.AgeableData(false); } return super.onInitialSpawn(worldIn, difficultyIn, reason, spawnDataIn, dataTag); } /** * If Animal, checks if the age timer is negative */ public boolean isChild() { return false; } protected void registerGoals() { this.goalSelector.addGoal(0, new PanicGoal(this, 1.25D)); this.goalSelector.addGoal(0, new SwimGoal(this)); this.goalSelector.addGoal(1, new LookAtGoal(this, PlayerEntity.class, 8.0F)); this.goalSelector.addGoal(2, new SitGoal(this)); this.goalSelector.addGoal(2, new FollowOwnerGoal(this, 1.0D, 5.0F, 1.0F, true)); this.goalSelector.addGoal(2, new WaterAvoidingRandomFlyingGoal(this, 1.0D)); this.goalSelector.addGoal(3, new LandOnOwnersShoulderGoal(this)); this.goalSelector.addGoal(3, new FollowMobGoal(this, 1.0D, 3.0F, 7.0F)); } public static AttributeModifierMap.MutableAttribute func_234213_eS_() { return MobEntity.func_233666_p_().func_233815_a_(Attributes.field_233818_a_, 15.0D).func_233815_a_(Attributes.field_233822_e_, (double)0.4F).func_233815_a_(Attributes.field_233821_d_, (double)0.2F); } /** * Returns new PathNavigateGround instance */ protected PathNavigator createNavigator(World worldIn) { FlyingPathNavigator flyingpathnavigator = new FlyingPathNavigator(this, worldIn); flyingpathnavigator.setCanOpenDoors(false); flyingpathnavigator.setCanSwim(true); flyingpathnavigator.setCanEnterDoors(true); return flyingpathnavigator; } protected float getStandingEyeHeight(Pose poseIn, EntitySize sizeIn) { return sizeIn.height * 0.6F; } /** * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons * use this to react to sunlight and start to burn. */ public void livingTick() { if (this.jukeboxPosition == null || !this.jukeboxPosition.withinDistance(this.getPositionVec(), 3.46D) || !this.world.getBlockState(this.jukeboxPosition).isIn(Blocks.JUKEBOX)) { this.partyParrot = false; this.jukeboxPosition = null; } super.livingTick(); this.calculateFlapping(); } /** * Called when a record starts or stops playing. Used to make parrots start or stop partying. */ @OnlyIn(Dist.CLIENT) public void setPartying(BlockPos pos, boolean isPartying) { this.jukeboxPosition = pos; this.partyParrot = isPartying; } @OnlyIn(Dist.CLIENT) public boolean isPartying() { return this.partyParrot; } private void calculateFlapping() { this.oFlap = this.flap; this.oFlapSpeed = this.flapSpeed; this.flapSpeed = (float)((double)this.flapSpeed + (double)(!this.onGround && !this.isPassenger() ? 4 : -1) * 0.3D); this.flapSpeed = MathHelper.clamp(this.flapSpeed, 0.0F, 1.0F); if (!this.onGround && this.flapping < 1.0F) { this.flapping = 1.0F; } this.flapping = (float)((double)this.flapping * 0.9D); Vector3d vector3d = this.getMotion(); if (!this.onGround && vector3d.y < 0.0D) { this.setMotion(vector3d.mul(1.0D, 0.6D, 1.0D)); } this.flap += this.flapping * 2.0F; } public ActionResultType func_230254_b_(PlayerEntity p_230254_1_, Hand p_230254_2_) { ItemStack itemstack = p_230254_1_.getHeldItem(p_230254_2_); if (!this.isTamed() && TAME_ITEMS.contains(itemstack.getItem())) { if (!p_230254_1_.abilities.isCreativeMode) { itemstack.shrink(1); } if (!this.isSilent()) { this.world.playSound((PlayerEntity)null, this.getPosX(), this.getPosY(), this.getPosZ(), SoundEvents.ENTITY_PARROT_EAT, this.getSoundCategory(), 1.0F, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); } if (!this.world.isRemote) { if (this.rand.nextInt(10) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, p_230254_1_)) { this.setTamedBy(p_230254_1_); this.world.setEntityState(this, (byte)7); } else { this.world.setEntityState(this, (byte)6); } } return ActionResultType.func_233537_a_(this.world.isRemote); } else if (itemstack.getItem() == DEADLY_ITEM) { if (!p_230254_1_.abilities.isCreativeMode) { itemstack.shrink(1); } this.addPotionEffect(new EffectInstance(Effects.WITHER, 900)); if (p_230254_1_.isCreative() || !this.isInvulnerable()) { this.attackEntityFrom(DamageSource.causePlayerDamage(p_230254_1_), Float.MAX_VALUE); } return ActionResultType.func_233537_a_(this.world.isRemote); } else if (!this.isFlying() && this.isTamed() && this.isOwner(p_230254_1_)) { if (!this.world.isRemote) { this.func_233687_w_(!this.func_233685_eM_()); } return ActionResultType.func_233537_a_(this.world.isRemote); } else { return super.func_230254_b_(p_230254_1_, p_230254_2_); } } /** * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on * the animal type) */ public boolean isBreedingItem(ItemStack stack) { return false; } public static boolean func_223317_c(EntityType<ParrotEntity> parrotIn, IWorld worldIn, SpawnReason reason, BlockPos p_223317_3_, Random random) { BlockState blockstate = worldIn.getBlockState(p_223317_3_.down()); return (blockstate.func_235714_a_(BlockTags.LEAVES) || blockstate.isIn(Blocks.GRASS_BLOCK) || blockstate.func_235714_a_(BlockTags.LOGS) || blockstate.isIn(Blocks.AIR)) && worldIn.getLightSubtracted(p_223317_3_, 0) > 8; } public boolean onLivingFall(float distance, float damageMultiplier) { return false; } protected void updateFallState(double y, boolean onGroundIn, BlockState state, BlockPos pos) { } /** * Returns true if the mob is currently able to mate with the specified mob. */ public boolean canMateWith(AnimalEntity otherAnimal) { return false; } @Nullable public AgeableEntity func_241840_a(ServerWorld p_241840_1_, AgeableEntity p_241840_2_) { return null; } public boolean attackEntityAsMob(Entity entityIn) { return entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), 3.0F); } @Nullable public SoundEvent getAmbientSound() { return SoundEvents.ENTITY_PARROT_AMBIENT; } protected SoundEvent getHurtSound(DamageSource damageSourceIn) { return SoundEvents.ENTITY_PARROT_HURT; } protected SoundEvent getDeathSound() { return SoundEvents.ENTITY_PARROT_DEATH; } protected void playStepSound(BlockPos pos, BlockState blockIn) { this.playSound(SoundEvents.ENTITY_PARROT_STEP, 0.15F, 1.0F); } protected float playFlySound(float volume) { this.playSound(SoundEvents.ENTITY_PARROT_FLY, 0.15F, 1.0F); return volume + this.flapSpeed / 2.0F; } protected boolean makeFlySound() { return true; } /** * Gets the pitch of living sounds in living entities. */ protected float getSoundPitch() { return getPitch(this.rand); } public static float getPitch(Random random) { return (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F; } public SoundCategory getSoundCategory() { return SoundCategory.NEUTRAL; } /** * Returns true if this entity should push and be pushed by other entities when colliding. */ public boolean canBePushed() { return true; } protected void collideWithEntity(Entity entityIn) { if (!(entityIn instanceof PlayerEntity)) { super.collideWithEntity(entityIn); } } /** * Called when the entity is attacked. */ public boolean attackEntityFrom(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { return false; } else { this.func_233687_w_(false); return super.attackEntityFrom(source, amount); } } public int getVariant() { return MathHelper.clamp(this.dataManager.get(VARIANT), 0, 4); } public void setVariant(int variantIn) { this.dataManager.set(VARIANT, variantIn); } protected void registerData() { super.registerData(); this.dataManager.register(VARIANT, 0); } public void writeAdditional(CompoundNBT compound) { super.writeAdditional(compound); compound.putInt("Variant", this.getVariant()); } /** * (abstract) Protected helper method to read subclass entity data from NBT. */ public void readAdditional(CompoundNBT compound) { super.readAdditional(compound); this.setVariant(compound.getInt("Variant")); } public boolean isFlying() { return !this.onGround; } @OnlyIn(Dist.CLIENT) public Vector3d func_241205_ce_() { return new Vector3d(0.0D, (double)(0.5F * this.getEyeHeight()), (double)(this.getWidth() * 0.4F)); } }
October 2, 20205 yr Author Guys I fixed it myself. You can ignore this or blocked. Game not crashes anymore.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.