65 lines
2.3 KiB
Java
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 {
|
|
}
|
|
}
|