minecraft-src/net/minecraft/world/InteractionResult.java
2025-07-04 02:49:36 +03:00

65 lines
2.3 KiB
Java

package net.minecraft.world;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.Nullable;
public sealed interface InteractionResult
permits InteractionResult.Success,
InteractionResult.Fail,
InteractionResult.Pass,
InteractionResult.TryEmptyHandInteraction {
InteractionResult.Success SUCCESS = new InteractionResult.Success(InteractionResult.SwingSource.CLIENT, InteractionResult.ItemContext.DEFAULT);
InteractionResult.Success SUCCESS_SERVER = new InteractionResult.Success(InteractionResult.SwingSource.SERVER, InteractionResult.ItemContext.DEFAULT);
InteractionResult.Success CONSUME = new InteractionResult.Success(InteractionResult.SwingSource.NONE, InteractionResult.ItemContext.DEFAULT);
InteractionResult.Fail FAIL = new InteractionResult.Fail();
InteractionResult.Pass PASS = new InteractionResult.Pass();
InteractionResult.TryEmptyHandInteraction TRY_WITH_EMPTY_HAND = new InteractionResult.TryEmptyHandInteraction();
default boolean consumesAction() {
return false;
}
public record Fail() implements InteractionResult {
}
public record ItemContext(boolean wasItemInteraction, @Nullable ItemStack heldItemTransformedTo) {
static InteractionResult.ItemContext NONE = new InteractionResult.ItemContext(false, null);
static InteractionResult.ItemContext DEFAULT = new InteractionResult.ItemContext(true, null);
}
public record Pass() implements InteractionResult {
}
public record Success(InteractionResult.SwingSource swingSource, InteractionResult.ItemContext itemContext) implements InteractionResult {
@Override
public boolean consumesAction() {
return true;
}
public InteractionResult.Success heldItemTransformedTo(ItemStack stack) {
return new InteractionResult.Success(this.swingSource, new InteractionResult.ItemContext(true, stack));
}
public InteractionResult.Success withoutItem() {
return new InteractionResult.Success(this.swingSource, InteractionResult.ItemContext.NONE);
}
public boolean wasItemInteraction() {
return this.itemContext.wasItemInteraction;
}
@Nullable
public ItemStack heldItemTransformedTo() {
return this.itemContext.heldItemTransformedTo;
}
}
public static enum SwingSource {
NONE,
CLIENT,
SERVER;
}
public record TryEmptyHandInteraction() implements InteractionResult {
}
}