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.
#Vanilla entity interaction and advancement
3 messages · Page 1 of 1 (latest)
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)