#Vanilla entity interaction and advancement

3 messages · Page 1 of 1 (latest)

spark stirrup
#

I have used fabric api's UseEntityCallback to add an interaction for equipping my mod's item on a happy ghast. Already, this has a problem that is the player sits on the ghast even when I return InteractionResult.FAIL. I also added an advancement for doing exactly this action, but it triggers every time I right click the ghast with the item.

#
        if (!level.isClientSide && hand == InteractionHand.MAIN_HAND) {
            if (entity is HappyGhast) {
                val handItem = player.getItemInHand(hand)

                val harnessWithPropeller = when(entity.bodyArmorItem.item) {
                    Items.WHITE_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.WHITE]
                    Items.ORANGE_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.ORANGE]
                    Items.MAGENTA_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.MAGENTA]
                    Items.LIGHT_BLUE_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.LIGHT_BLUE]
                    Items.YELLOW_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.YELLOW]
                    Items.LIME_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.LIME]
                    Items.PINK_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.PINK]
                    Items.GRAY_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.GRAY]
                    Items.LIGHT_GRAY_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.LIGHT_GRAY]
                    Items.CYAN_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.CYAN]
                    Items.PURPLE_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.PURPLE]
                    Items.BLUE_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.BLUE]
                    Items.BROWN_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.BROWN]
                    Items.GREEN_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.GREEN]
                    Items.RED_HARNESS -> HARNESSES_WITH_PROPELLERS[DyeColor.RED]
                    else -> null
                }

                if(harnessWithPropeller != null) {
                    entity.bodyArmorItem = harnessWithPropeller.defaultInstance
                    handItem.consume(1, player)
                    return InteractionResult.FAIL
                }
            }
        }

        return InteractionResult.PASS
#

Advancement code:

val happyAirship = Advancement.Builder.advancement()
                .parent(ResourceLocation.withDefaultNamespace("husbandry/place_dried_ghast_in_water"))
                .display(
                    HappyAirTravel.PROPELLER,
                    Component.translatable(happyAirshipAdvancementName),
                    Component.translatable(happyAirshipAdvancementDescription),
                    null,
                    AdvancementType.TASK,
                    true,
                    true,
                    false
                )
                .addCriterion(
                    "", PlayerInteractTrigger.TriggerInstance.itemUsedOnEntity(
                        ItemPredicate.Builder.item().of(
                            registryLookup.lookupOrThrow(Registries.ITEM),
                            HappyAirTravel.PROPELLER
                        ),
                        Optional.of(
                            EntityPredicate.wrap(
                                EntityPredicate.Builder.entity().of(
                                    registryLookup.lookupOrThrow(
                                        Registries.ENTITY_TYPE
                                    ), EntityType.HAPPY_GHAST
                                )
                            )
                        )
                    )
                )
                .build(ResourceLocation.fromNamespaceAndPath(HappyAirTravel.id, "husbandry/happy_airship"))

            consumer.accept(happyAirship)