Jump to content

[1.12.2]Problem with changing the HeldItem of an Entity


_Cruelar_

Recommended Posts

I have an Entity with a RangedBow Attack and a Melee Attack. To swap between them it checks for the Item in his MainHand. If it is a Bow it uses the RangedAttack. I've wrote a custom Ai to say when it should change his equipment to a sword and a shield. To store the items he uses I made a NonNullList. My Problem is it crashes cause of Ticking Entity. It also says me it occurs at super.onUpdate in my onUpdate method and that's somehow related to my Ai. But I don't have any Idea what exactly causes this  (I'm not experienced with writing AIs)

My Code:

Entity:

package com.cruelar.cruelars_triforcemod.entities.monster;

import com.cruelar.cruelars_triforcemod.entities.IChangeWeaponAI;
import com.cruelar.cruelars_triforcemod.entities.IModRangedAttackMob;
import com.cruelar.cruelars_triforcemod.entities.ai.EntityAIChangeWeapon;
import com.cruelar.cruelars_triforcemod.entities.ai.ModAIAttackRangedBow;
import com.cruelar.cruelars_triforcemod.entities.ai.ModAINearestAttackableTarget;
import com.cruelar.cruelars_triforcemod.init.ModItems;
import com.cruelar.cruelars_triforcemod.items.Lynel_Bow;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.IEntityLivingData;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.*;
import net.minecraft.entity.item.EntityBoat;
import net.minecraft.entity.monster.EntityIronGolem;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.monster.EntityPigZombie;
import net.minecraft.entity.passive.EntityVillager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.init.MobEffects;
import net.minecraft.init.SoundEvents;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.ItemArrow;
import net.minecraft.item.ItemBow;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.datasync.DataParameter;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.network.datasync.EntityDataManager;
import net.minecraft.network.play.server.SPacketEntityEquipment;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.DifficultyInstance;
import net.minecraft.world.EnumDifficulty;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

import javax.annotation.Nullable;

public class Red_Maned_Lynel extends EntityMob implements IChangeWeaponAI,IModRangedAttackMob {
    private static final DataParameter<Boolean> SWINGING_ARMS = EntityDataManager.<Boolean>createKey(Red_Maned_Lynel.class, DataSerializers.BOOLEAN);
    private final ModAIAttackRangedBow<Red_Maned_Lynel> aiArrowAttack = new ModAIAttackRangedBow<Red_Maned_Lynel>(this,1.0D,20,32F);
    private final EntityAIAttackMelee aiAttackOnCollide = new EntityAIAttackMelee(this, 1.2D, false){
        /**
         * Reset the task's internal state. Called when this task is interrupted by another one
         */
        @Override
        public void resetTask()
        {
            super.resetTask();
            Red_Maned_Lynel.this.setSwingingArms(false);
        }
        /**
         * Execute a one shot task or start executing a continuous task
         */
        @Override
        public void startExecuting()
        {
            super.startExecuting();
            Red_Maned_Lynel.this.setSwingingArms(true);
        }
    };
    public static final ResourceLocation LOOT = new ResourceLocation("cruelars_triforcemod:entities/red_maned_lynel");
    public static final ResourceLocation RESOURCE_LOCATION = new ResourceLocation("cruelars_triforcemod:textures/entity/red_maned_lynel.png");
    private final NonNullList<ItemStack> arrowInventory = NonNullList.<ItemStack>withSize(1, ItemStack.EMPTY);
    private final NonNullList<ItemStack> unusedInventory = NonNullList.<ItemStack>withSize(2,ItemStack.EMPTY);
    private static final DataParameter<Byte> STATUS = EntityDataManager.<Byte>createKey(Red_Maned_Lynel.class, DataSerializers.BYTE);
    public int tailCounter;
    private float rearingAmount;
    private float prevRearingAmount;

    public Red_Maned_Lynel(World worldIn) {
        super(worldIn);
        this.setSwingingArms(true);
        this.setSize(1.3964844F,2F);
        this.stepHeight = 1.0F;
        this.setCombatTask();
    }

    @Override
    protected void entityInit(){
        super.entityInit();
        this.dataManager.register(STATUS, Byte.valueOf((byte)0));
        this.dataManager.register(SWINGING_ARMS, Boolean.valueOf(false));
    }

    @Override
    protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty){
        this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(ModItems.lynel_bow));
        ItemStack itemStack = new ItemStack(ModItems.bomb_arrow);
        itemStack.setCount(10);
        this.arrowInventory.set(0,itemStack);
        this.unusedInventory.set(0,new ItemStack(Items.IRON_SWORD));
        this.unusedInventory.set(1,new ItemStack(Items.SHIELD));
        }
    }

    @Override
    protected void  applyEntityAttributes(){
        super.applyEntityAttributes();
        this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(1500.0D);
        this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.5D);
        this.getEntityAttribute(SharedMonsterAttributes.ARMOR).setBaseValue(0.0D);
        this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(32.0D);
        this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(10.0D);
        this.getEntityAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE).setBaseValue(100.0D);
    }

    @Override
    protected void initEntityAI(){
        this.tasks.addTask(0,new EntityAISwimming(this));
        this.tasks.addTask(2,new EntityAIAttackMelee(this,1.0D,true));
        this.tasks.addTask(5,new EntityAIMoveTowardsRestriction(this,1.0D));
        this.tasks.addTask(7,new EntityAIWander(this,1.0D));
        this.tasks.addTask(8,new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
        this.tasks.addTask(8,new EntityAILookIdle(this));
        this.tasks.addTask(1,new EntityAIChangeWeapon<>(this));
        this.applyEntityAI();
    }

    protected void applyEntityAI() {
        this.tasks.addTask(6, new EntityAIMoveThroughVillage(this, 1.0D, false));
        this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false, EntityPigZombie.class));
        this.targetTasks.addTask(2, new ModAINearestAttackableTarget<>(this, EntityPlayer.class, true));
        this.targetTasks.addTask(3, new ModAINearestAttackableTarget<>(this, EntityVillager.class, true));
        this.targetTasks.addTask(3, new ModAINearestAttackableTarget<>(this, EntityIronGolem.class, true));
    }

    @Override
    public int getMaxSpawnedInChunk(){
        return 1;
    }

    @Override
    protected boolean isValidLightLevel(){
        return true;
    }

    @Override
    public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) {
        EntityArrow entityarrow = this.getArrow(distanceFactor);
        EntityArrow entityarrow2 = this.getArrow(distanceFactor);
        EntityArrow entityarrow3 = this.getArrow(distanceFactor);
        double d0 = target.posX - this.posX;
        double d1 = target.getEntityBoundingBox().minY + (double)(target.height / 3.0F) - entityarrow.posY;
        double d2 = target.posZ - this.posZ;
        double d3 = (double) MathHelper.sqrt(d0 * d0 + d2 * d2);
        entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float)(14 - this.world.getDifficulty().getDifficultyId() * 4));
        entityarrow2.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float)(14 - this.world.getDifficulty().getDifficultyId() * 4));
        entityarrow3.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float)(14 - this.world.getDifficulty().getDifficultyId() * 4));
        entityarrow2.rotationYaw=entityarrow2.rotationYaw+2F;
        entityarrow3.rotationYaw=entityarrow3.rotationYaw-2F;
        this.playSound(SoundEvents.ENTITY_SKELETON_SHOOT, 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F));
        this.world.spawnEntity(entityarrow);
        this.world.spawnEntity(entityarrow2);
        this.world.spawnEntity(entityarrow3);
    }

    protected EntityArrow getArrow(float p_190726_1_)
    {
        if (getArrowInInventory().getItem()!=Items.AIR) {
            EntityArrow entityarrow = ((ItemArrow) getArrowInInventory().getItem()).createArrow(world, getArrowInInventory(), this);
            entityarrow.setEnchantmentEffectsFromEntity(this, p_190726_1_);
            return entityarrow;
        }else {
            ItemStack itemStack = new ItemStack(Items.ARROW);
            ItemArrow itemArrow = (ItemArrow) itemStack.getItem();
            return itemArrow.createArrow(world,itemStack,this);
        }
    }

    private void moveTail()
    {
        this.tailCounter = 1;
    }

    @Override
    public boolean canBeSteered()
    {
        return false;
    }

    @Override
    public void changeHeldItems() {
        ItemStack itemStackOld1 = this.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND);
        ItemStack itemStackOld2 = this.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND);
        ItemStack itemStackNew1 = this.unusedInventory.get(0);
        ItemStack itemStackNew2 = this.unusedInventory.get(1);
        this.unusedInventory.set(0,itemStackOld1);
        this.unusedInventory.set(1,itemStackOld2);
        this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND,itemStackNew1);
        this.setItemStackToSlot(EntityEquipmentSlot.OFFHAND,itemStackNew2);
    }

    @Override
    public void setCombatTask()
    {
        if (this.world != null && !this.world.isRemote)
        {
            this.tasks.removeTask(this.aiAttackOnCollide);
            this.tasks.removeTask(this.aiArrowAttack);
            ItemStack itemstack = this.getHeldItemMainhand();
            System.out.println(itemstack.getItem());

            if (itemstack.getItem() == ModItems.lynel_bow)
            {
                int i = 20;

                if (this.world.getDifficulty() != EnumDifficulty.HARD)
                {
                    i = 40;
                }

                this.aiArrowAttack.setAttackCooldown(i);
                this.tasks.addTask(1, this.aiArrowAttack);
            }
            else
            {
                this.tasks.addTask(1, this.aiAttackOnCollide);
            }
        }
    }

    @Nullable
    @Override
    public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata)
    {
        this.setEquipmentBasedOnDifficulty(difficulty);
        this.setEnchantmentBasedOnDifficulty(difficulty);
        this.setCombatTask();
        return livingdata;
    }

    @Override
    public void setDropChance(EntityEquipmentSlot slotIn, float chance)
    {
        switch (slotIn.getSlotType())
        {
            case HAND:
                this.inventoryHandsDropChances[slotIn.getIndex()] = 1F;
                break;
            case ARMOR:
                this.inventoryArmorDropChances[slotIn.getIndex()] = 1F;
        }
    }

    @Override
    public void setItemStackToSlot(EntityEquipmentSlot slotIn, ItemStack stack)
    {
        super.setItemStackToSlot(slotIn, stack);

        if (!this.world.isRemote && slotIn == EntityEquipmentSlot.MAINHAND)
        {
            this.setCombatTask();
        }
    }

    protected boolean getLynelWatchableBoolean(int p_110233_1_)
    {
        return (((Byte)this.dataManager.get(STATUS)).byteValue() & p_110233_1_) != 0;
    }

    protected void setLynelWatchableBoolean(int p_110208_1_, boolean p_110208_2_)
    {
        byte b0 = ((Byte)this.dataManager.get(STATUS)).byteValue();

        if (p_110208_2_)
        {
            this.dataManager.set(STATUS, Byte.valueOf((byte)(b0 | p_110208_1_)));
        }
        else
        {
            this.dataManager.set(STATUS, Byte.valueOf((byte)(b0 & ~p_110208_1_)));
        }
    }

    public void setRearing(boolean rearing)
    {
        this.setLynelWatchableBoolean(2, rearing);
    }

    public boolean isRearing()
    {
        return this.getLynelWatchableBoolean(2);
    }

    @Override
    public void onUpdate()
    {
        super.onUpdate();
        if (this.tailCounter > 0 && ++this.tailCounter > 8)
        {
            this.tailCounter = 0;
        }

        this.prevRearingAmount = this.rearingAmount;

        if (this.isRearing())
        {
            this.rearingAmount += (1.0F - this.rearingAmount) * 0.4F + 0.05F;

            if (this.rearingAmount > 1.0F)
            {
                this.rearingAmount = 1.0F;
            }
        }
        else
        {
            this.rearingAmount += (0.8F * this.rearingAmount * this.rearingAmount * this.rearingAmount - this.rearingAmount) * 0.6F - 0.05F;

            if (this.rearingAmount < 0.0F)
            {
                this.rearingAmount = 0.0F;
            }
        }
    }

    @SideOnly(Side.CLIENT)
    public float getRearingAmount(float p_110223_1_)
    {
        return this.prevRearingAmount + (this.rearingAmount - this.prevRearingAmount) * p_110223_1_;
    }

    @Override
    public void writeEntityToNBT(NBTTagCompound compound)
    {
        super.writeEntityToNBT(compound);
        NBTTagList nbttaglist = new NBTTagList();

        for (ItemStack itemstack : this.unusedInventory)
        {
            NBTTagCompound nbttagcompound = new NBTTagCompound();

            if (!itemstack.isEmpty())
            {
                itemstack.writeToNBT(nbttagcompound);
            }

            nbttaglist.appendTag(nbttagcompound);
        }
        compound.setTag("UnusedItems", nbttaglist);
        this.setCombatTask();
    }


    @Override
    public void readEntityFromNBT(NBTTagCompound compound)
    {
        super.readEntityFromNBT(compound);
        if (compound.hasKey("UnusedItems", 9))
        {
            NBTTagList nbttaglist = compound.getTagList("UnusedItems", 10);

            for (int i = 0; i < this.unusedInventory.size(); ++i)
            {
                this.unusedInventory.set(i, new ItemStack(nbttaglist.getCompoundTagAt(i)));
            }
        }
        this.setCombatTask();
    }

    @SideOnly(Side.CLIENT)
    public boolean isSwingingArms()
    {
        return ((Boolean)this.dataManager.get(SWINGING_ARMS)).booleanValue();
    }

    @Override
    public void setSwingingArms(boolean swingingArms)
    {
        this.dataManager.set(SWINGING_ARMS, Boolean.valueOf(swingingArms));
    }
}

Ai:

package com.cruelar.cruelars_triforcemod.entities.ai;

import com.cruelar.cruelars_triforcemod.entities.IChangeWeaponAI;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.ai.EntityAIBase;
import net.minecraft.item.ItemBow;

public class EntityAIChangeWeapon<T extends EntityLiving & IChangeWeaponAI> extends EntityAIBase {
    private final T entity;

    public EntityAIChangeWeapon(T executer)
    {
        this.entity = executer;
        this.setMutexBits(0);
    }

    @Override
    public boolean shouldExecute() {
        return this.entity.getAttackTarget()!=null;
    }

    @Override
    public void startExecuting()
    {
        super.startExecuting();
        ((IChangeWeaponAI)this.entity).changeHeldItems();
    }

    @Override
    public boolean shouldContinueExecuting()
    {
        return (this.shouldExecute() || !this.entity.getNavigator().noPath());
    }

    @Override
    public void resetTask()
    {
        super.resetTask();
        this.entity.resetActiveHand();
    }

    protected boolean isBowInMainhand()
    {
        return !this.entity.getHeldItemMainhand().isEmpty() && this.entity.getHeldItemMainhand().getItem()instanceof ItemBow;
    }

    public void updateTask()
    {
        EntityLivingBase entitylivingbase = this.entity.getAttackTarget();

        if (entitylivingbase != null) {
            double d0 = this.entity.getDistanceSq(entitylivingbase.posX, entitylivingbase.getEntityBoundingBox().minY, entitylivingbase.posZ);
            boolean flag = this.entity.getEntitySenses().canSee(entitylivingbase);
            boolean flag1 = this.isBowInMainhand();
            if (d0>16D||!flag){
                if(!flag1) {
                    ((IChangeWeaponAI) this.entity).changeHeldItems();
                }
            }else {
                if (flag1) {
                    ((IChangeWeaponAI) this.entity).changeHeldItems();
                }
            }
        }
    }
}

Interface:

package com.cruelar.cruelars_triforcemod.entities;

public interface IChangeWeaponAI {
    
    void changeHeldItems();
    
    void setCombatTask();
}

log

Spoiler

[17:26:34] [main/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:629]: ---- Minecraft Crash Report ----
// Who set us up the TNT?

Time: 8/17/18 5:26 PM
Description: Ticking entity

java.util.ConcurrentModificationException
    at java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:719)
    at java.util.LinkedHashMap$LinkedKeyIterator.next(LinkedHashMap.java:742)
    at net.minecraft.entity.ai.EntityAITasks.onUpdateTasks(EntityAITasks.java:70)
    at net.minecraft.entity.EntityLiving.updateEntityActionState(EntityLiving.java:843)
    at net.minecraft.entity.EntityLivingBase.onLivingUpdate(EntityLivingBase.java:2580)
    at net.minecraft.entity.EntityLiving.onLivingUpdate(EntityLiving.java:647)
    at net.minecraft.entity.monster.EntityMob.onLivingUpdate(EntityMob.java:49)
    at net.minecraft.entity.EntityLivingBase.onUpdate(EntityLivingBase.java:2396)
    at net.minecraft.entity.EntityLiving.onUpdate(EntityLiving.java:346)
    at net.minecraft.entity.monster.EntityMob.onUpdate(EntityMob.java:57)
    at com.cruelar.cruelars_triforcemod.entities.monster.Red_Maned_Lynel.onUpdate(Red_Maned_Lynel.java:310)
    at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2168)
    at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:871)
    at net.minecraft.world.World.updateEntity(World.java:2127)
    at net.minecraft.world.World.updateEntities(World.java:1928)
    at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:643)
    at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:842)
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743)
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592)
    at java.lang.Thread.run(Thread.java:748)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Thread: Client thread
Stacktrace:
    at java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:719)
    at java.util.LinkedHashMap$LinkedKeyIterator.next(LinkedHashMap.java:742)
    at net.minecraft.entity.ai.EntityAITasks.onUpdateTasks(EntityAITasks.java:70)
    at net.minecraft.entity.EntityLiving.updateEntityActionState(EntityLiving.java:843)
    at net.minecraft.entity.EntityLivingBase.onLivingUpdate(EntityLivingBase.java:2580)
    at net.minecraft.entity.EntityLiving.onLivingUpdate(EntityLiving.java:647)
    at net.minecraft.entity.monster.EntityMob.onLivingUpdate(EntityMob.java:49)
    at net.minecraft.entity.EntityLivingBase.onUpdate(EntityLivingBase.java:2396)
    at net.minecraft.entity.EntityLiving.onUpdate(EntityLiving.java:346)
    at net.minecraft.entity.monster.EntityMob.onUpdate(EntityMob.java:57)
    at com.cruelar.cruelars_triforcemod.entities.monster.Red_Maned_Lynel.onUpdate(Red_Maned_Lynel.java:310)
    at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2168)
    at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:871)
    at net.minecraft.world.World.updateEntity(World.java:2127)

-- Entity being ticked --
Details:
    Entity Type: cruelars_triforcemod:textures/entity/red_maned_lynel.png (com.cruelar.cruelars_triforcemod.entities.monster.Red_Maned_Lynel)
    Entity ID: 92
    Entity Name: Lynel
    Entity's Exact location: -1334.79, 63.00, -1634.81
    Entity's Block location: World: (-1335,63,-1635), Chunk: (at 9,3,13 in -84,-103; contains blocks -1344,0,-1648 to -1329,255,-1633), Region: (-3,-4; contains chunks -96,-128 to -65,-97, blocks -1536,0,-2048 to -1025,255,-1537)
    Entity's Momentum: 0.00, -0.08, 0.00
    Entity's Passengers: []
    Entity's Vehicle: ~~ERROR~~ NullPointerException: null
Stacktrace:
    at net.minecraft.world.World.updateEntities(World.java:1928)
    at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:643)

-- Affected level --
Details:
    Level name: Screenshots
    All players: 1 total; [EntityPlayerMP['Player477'/95, l='Screenshots', x=-1332.48, y=63.00, z=-1655.07]]
    Chunk stats: ServerChunkCache: 725 Drop: 0
    Level seed: -8266429712519088344
    Level generator: ID 01 - flat, ver 0. Features enabled: false
    Level generator options: 3;minecraft:bedrock,58*minecraft:stone,3*minecraft:dirt,minecraft:grass;1;village
    Level spawn location: World: (-1338,4,-1600), Chunk: (at 6,0,0 in -84,-100; contains blocks -1344,0,-1600 to -1329,255,-1585), Region: (-3,-4; contains chunks -96,-128 to -65,-97, blocks -1536,0,-2048 to -1025,255,-1537)
    Level time: 73946 game time, 12250 day time
    Level dimension: 0
    Level storage version: 0x04ABD - Anvil
    Level weather: Rain time: 3862 (now: false), thunder time: 16610 (now: false)
    Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: true
Stacktrace:
    at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:842)
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743)
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592)
    at java.lang.Thread.run(Thread.java:748)

-- System Details --
Details:
    Minecraft Version: 1.12.2
    Operating System: Windows 10 (amd64) version 10.0
    Java Version: 1.8.0_152, Oracle Corporation
    Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
    Memory: 191859936 bytes (182 MB) / 875036672 bytes (834 MB) up to 1883242496 bytes (1796 MB)
    JVM Flags: 0 total;
    IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
    FML: MCP 9.42 Powered by Forge 14.23.4.2705 9 mods loaded, 9 mods active
    States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored

    | State               | ID                                       | Version            | Source                                                    | Signature |
    |:---------           |:--------------------             |:------------        |:--------------------------------                 |:--------- |
    | UCHIJAAAA | minecraft                         | 1.12.2               | minecraft.jar                                       | None      |
    | UCHIJAAAA | mcp                                   | 9.42                   | minecraft.jar                                        | None      |
    | UCHIJAAAA | FML                                    | 8.0.99.99         | forgeSrc-1.12.2-14.23.4.2705.jar | None      |
    | UCHIJAAAA | forge                                  | 14.23.4.2705 | forgeSrc-1.12.2-14.23.4.2705.jar | None      |
    | UCHIJAAAA | cruelars_triforcemod | 0.4.2                 | Cruelars_Triforcemod_main        | None      |
    | UCHIJAAAA | journeymap                    | 1.12.2-5.5.2   | journeymap-1.12.2-5.5.2.jar         | None      |
    | UCHIJAAAA | baubles                            | 1.5.2                  | Baubles-Mod-1.12.2.jar                  | None      |
    | UCHIJAAAA | ichunutil                           | 7.1.4                 | iChunUtil-1.12.2-7.1.4.jar               | None      |
    | UCHIJAAAA | tabula                                | 7.0.0                 | Tabula-1.12.2-7.0.0-deobf.jar       | None      |

    Loaded coremods (and transformers):
    GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
    Profiler Position: N/A (disabled)
    Player Count: 1 / 8; [EntityPlayerMP['Player477'/95, l='Screenshots', x=-1332.48, y=63.00, z=-1655.07]]
    Type: Integrated Server (map_client.txt)
    Is Modded: Definitely; Client brand changed to 'fml,forge'
[17:26:34] [main/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:629]: #@!@# Game crashed! Crash report saved to: #@!@# .\crash-reports\crash-2018-08-17_17.26.33-server.txt
[17:26:34] [Client Shutdown Thread/INFO] [net.minecraft.server.MinecraftServer]: Stopping server
[17:26:34] [Client Shutdown Thread/INFO] [net.minecraft.server.MinecraftServer]: Saving players
[17:26:34] [Client Shutdown Thread/INFO] [net.minecraft.server.MinecraftServer]: Saving worlds
AL lib: (EE) alc_cleanup: 1 device not closed

 

My Projects:

Cruelars Triforcemod (1.12 release; 1.14 alpha soon coming)

 

Important:

As my mod is on at least 10 different third party sites without my permission, I want to warn you about that with a link to StopModReposts

Link to comment
Share on other sites

My guess is that you're somehow modifying tasks or targetTasks from within the AI task itself (e.g. by calling setCombatTask()). This is a no-no as you modify a list while that list is being iterrated over, invalidating the iteration (was the item removed already iterated over? if so, do we need to somehow "undo" it? was the item added supposed to be iterated over? The JVM can't answer these questions).

  • Thanks 1

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

Works after I moved the setCombatTask From addEquipmentBasedonDifficulty to after super.onUpdate.

Btw. wasn't a good idea to make a mod which lowers players basehealth and making high health and high attackdamage Mobs.

My Projects:

Cruelars Triforcemod (1.12 release; 1.14 alpha soon coming)

 

Important:

As my mod is on at least 10 different third party sites without my permission, I want to warn you about that with a link to StopModReposts

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.