Posted December 10, 20213 yr Hey guys im creating a custom monster that attacks correctly and the attributes are being registered, but whenever it attacks something the game crashes stating that java.lang.IllegalArgumentException: Can't find attribute minecraft:generic.attack_damage Anyone know what could be causing this? private EntityInit() {} public static final DeferredRegister<EntityType<?>> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITIES, RPGMod.MODID); public static final RegistryObject<EntityType<ExampleEntity>> EXAMPLE_ENTITY = ENTITIES.register("example_entity", () -> EntityType.Builder.of(ExampleEntity::new, MobCategory.CREATURE).sized(0.8f, 0.6f).fireImmune() .build(new ResourceLocation(RPGMod.MODID, "example_entity").toString())); public static final RegistryObject<EntityType<Muncher>> MUNCHER = ENTITIES.register("muncher", () -> EntityType.Builder.of(Muncher::new, MobCategory.MONSTER).sized(0.8f, 0.6f).fireImmune() .build(new ResourceLocation(RPGMod.MODID, "muncher").toString())); } public class Muncher extends Monster implements IAnimatable, IAnimationTickable { private AnimationFactory factory = new AnimationFactory(this); public Muncher(EntityType<? extends Monster> entityType, Level level) { super(entityType, level); } protected void registerGoals() { this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 8.0F)); this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); this.addBehaviourGoals(); } protected void addBehaviourGoals() { this.goalSelector.addGoal(2, new MeleeAttackGoal(this, 1.0D, false)); this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0D)); this.targetSelector.addGoal(1, (new HurtByTargetGoal(this)).setAlertOthers(Muncher.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); } public static AttributeSupplier.Builder createAttributes() { return Monster.createMonsterAttributes(); } protected SoundEvent getAmbientSound() { return SoundEvents.AMBIENT_CAVE; } protected SoundEvent getHurtSound(DamageSource source) { return SoundEvents.AXOLOTL_HURT; } protected SoundEvent getDeathSound() { return SoundEvents.ENDER_DRAGON_DEATH; } protected void playStepSound(BlockPos p_29492_, BlockState p_29493_) { this.playSound(SoundEvents.BUBBLE_COLUMN_BUBBLE_POP, 0.15F, 1.0F); } // SPEED // this.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, 1, 60)); protected void dropCustomDeathLoot(DamageSource p_34291_, int p_34292_, boolean p_34293_) { super.dropCustomDeathLoot(p_34291_, p_34292_, p_34293_); Entity entity = p_34291_.getEntity(); System.out.println("Ok boomer"); if (entity instanceof Creeper) { Creeper creeper = (Creeper) entity; if (creeper.canDropMobsSkull()) { ItemStack itemstack = this.getSkull(); if (!itemstack.isEmpty()) { creeper.increaseDroppedSkulls(); this.spawnAtLocation(itemstack); } } } } protected ItemStack getSkull() { return new ItemStack(Items.ZOMBIE_HEAD); } private <E extends IAnimatable> PlayState predicate(AnimationEvent<E> event) { if (event.isMoving()) { event.getController().setAnimation(new AnimationBuilder().addAnimation("animation.penis.muncher.man.walking", true)); } return PlayState.CONTINUE; } @Override public void registerControllers(AnimationData data) { data.addAnimationController(new AnimationController<Muncher>(this, "controller", 0, this::predicate)); } @Override public AnimationFactory getFactory() { return this.factory; } @Override public int tickTimer() { return tickCount; } } @Mod.EventBusSubscriber(modid = RPGMod.MODID, bus = Bus.MOD) public class CommonModEvents { @SubscribeEvent public static void registerAttributes(EntityAttributeCreationEvent event) { event.put(EntityInit.EXAMPLE_ENTITY.get(), ExampleEntity.createAttributes().build()); event.put(EntityInit.MUNCHER.get(), ExampleEntity.createAttributes().build()); } }
December 10, 20213 yr Author @Mod.EventBusSubscriber(modid = RPGMod.MODID, bus = Bus.MOD) public class CommonModEvents { @SubscribeEvent public static void registerAttributes(EntityAttributeCreationEvent event) { event.put(EntityInit.EXAMPLE_ENTITY.get(), ExampleEntity.createAttributes().build()); event.put(EntityInit.MUNCHER.get(), ExampleEntity.createAttributes().build()); System.out.println("IT WORKED!!!!\n" + "wow"); System.out.println("IT WORKED!!!!\n" + "wow"); System.out.println("IT WORKED!!!!\n" + "wow"); System.out.println("IT WORKED!!!!\n" + "wow"); } } THis is printing
December 11, 20213 yr Author Never mind I got it apparently putting the attributes straight into the event changed it @Mod.EventBusSubscriber(modid = RPGMod.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) public class CommonModEvents { @SubscribeEvent public static void registerAttributes(EntityAttributeCreationEvent event) { event.put(EntityInit.EXAMPLE_ENTITY.get(), ExampleEntity.createAttributes().build()); event.put(EntityInit.MUNCHER.get(), Monster.createMonsterAttributes().add(Attributes.ATTACK_DAMAGE, 5.0D).add(Attributes.ATTACK_SPEED, 4.0D).build()); System.out.println("IT WORKED!!!!\n" + "wow"); System.out.println("IT WORKED!!!!\n" + "wow"); System.out.println("IT WORKED!!!!\n" + "wow"); System.out.println("IT WORKED!!!!\n" + "wow"); }
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.