Use onItemUseFirst

This commit is contained in:
DBotThePony 2023-04-02 15:10:13 +07:00
parent 516de507e4
commit 82e410ad33
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 8 additions and 30 deletions

View File

@ -47,7 +47,6 @@ import ru.dbotthepony.mc.otm.config.ServerConfig;
import ru.dbotthepony.mc.otm.config.ToolsConfig;
import ru.dbotthepony.mc.otm.core.math.Decimal;
import ru.dbotthepony.mc.otm.item.ItemTritaniumArmor;
import ru.dbotthepony.mc.otm.item.PriorityUseItemKt;
import ru.dbotthepony.mc.otm.item.QuantumBatteryItem;
import ru.dbotthepony.mc.otm.item.weapon.AbstractWeaponItem;
import ru.dbotthepony.mc.otm.item.PortableCondensationDriveItem;
@ -187,8 +186,6 @@ public final class OverdriveThatMatters {
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryBlockEntity.Companion::playerDisconnected);
EVENT_BUS.addListener(EventPriority.LOWEST, MatteryBlockEntity.Companion::postLevelTick);
EVENT_BUS.addListener(EventPriority.NORMAL, PriorityUseItemKt::onItemRightClick);
EVENT_BUS.addListener(EventPriority.LOWEST, KillAsAndroidTrigger.INSTANCE::onKill);
EVENT_BUS.addListener(EventPriority.NORMAL, EnderTeleporterFeature.Companion::onEntityDeath);

View File

@ -24,7 +24,6 @@ import net.minecraft.world.level.material.Fluids
import net.minecraftforge.common.SoundActions
import net.minecraftforge.common.capabilities.ForgeCapabilities
import net.minecraftforge.common.capabilities.ICapabilityProvider
import net.minecraftforge.event.entity.player.PlayerInteractEvent
import net.minecraftforge.fluids.FluidStack
import net.minecraftforge.fluids.capability.IFluidHandler
import net.minecraftforge.fluids.capability.templates.FluidHandlerItemStack
@ -38,7 +37,7 @@ import ru.dbotthepony.mc.otm.core.immutableList
import ru.dbotthepony.mc.otm.core.immutableMap
import ru.dbotthepony.mc.otm.core.orNull
class FluidCapsuleItem(val capacity: () -> Int) : Item(Properties().stacksTo(64)), PriorityUseItem {
class FluidCapsuleItem(val capacity: () -> Int) : Item(Properties().stacksTo(64)) {
private inner class Cap(itemStack: ItemStack) : FluidHandlerItemStack(itemStack, capacity.invoke()) {
override fun fill(resource: FluidStack, doFill: IFluidHandler.FluidAction): Int {
this.capacity = this@FluidCapsuleItem.capacity.invoke()
@ -61,17 +60,17 @@ class FluidCapsuleItem(val capacity: () -> Int) : Item(Properties().stacksTo(64)
}
}
override fun isPriorityConsumer(event: PlayerInteractEvent.RightClickBlock): Boolean {
return canInteract(event.itemStack, event.entity, Context(event.hitVec.blockPos, event.entity.level.getBlockState(event.hitVec.blockPos), event.hitVec.direction))
}
override fun useOn(pContext: UseOnContext): InteractionResult {
// TODO: Так как использование предмета заблокировано за player.abilities.canBuild
// капсулу нельзя использовать в режиме приключения
// почему же можно использовать вёдра на котлах?
// ИБО КОТЛЫ ЗАХАРДКОЖЕНЫ НА ВЗАИМОДЕЙСТВИЕ С ВЁДРАМИ
override fun onItemUseFirst(stack: ItemStack, pContext: UseOnContext): InteractionResult {
val context = Context(pContext.clickedPos, pContext.level.getBlockState(pContext.clickedPos), pContext.clickedFace)
if (canInteract(pContext.itemInHand, pContext.player ?: return InteractionResult.FAIL, context))
return interact(pContext.itemInHand, pContext.player!!, context)
return InteractionResult.FAIL
return super.onItemUseFirst(stack, pContext)
}
override fun getName(pStack: ItemStack): Component {
@ -140,7 +139,7 @@ class FluidCapsuleItem(val capacity: () -> Int) : Item(Properties().stacksTo(64)
}
}
return InteractionResult.sidedSuccess(player.level.isClientSide)
return InteractionResult.CONSUME
}
}

View File

@ -1,18 +0,0 @@
package ru.dbotthepony.mc.otm.item
import net.minecraftforge.event.entity.player.PlayerInteractEvent
import net.minecraftforge.eventbus.api.Event
interface PriorityUseItem {
fun isPriorityConsumer(event: PlayerInteractEvent.RightClickBlock): Boolean
}
internal fun onItemRightClick(event: PlayerInteractEvent.RightClickBlock) {
val item = event.itemStack.item
if (!event.itemStack.isEmpty && item is PriorityUseItem) {
if (item.isPriorityConsumer(event)) {
event.useBlock = Event.Result.DENY
}
}
}