33 lines
1.5 KiB
Java
33 lines
1.5 KiB
Java
package io.github.twokilohertz.hotbarreplace.mixin;
|
|
|
|
import net.minecraft.item.BlockItem;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemPlacementContext;
|
|
import net.minecraft.util.ActionResult;
|
|
import org.spongepowered.asm.mixin.Mixin;
|
|
import org.spongepowered.asm.mixin.injection.At;
|
|
import org.spongepowered.asm.mixin.injection.Inject;
|
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
|
import io.github.twokilohertz.hotbarreplace.HotbarReplace;
|
|
|
|
@Mixin(BlockItem.class)
|
|
public class BlockItemMixin {
|
|
private Item lastPlacedItem;
|
|
|
|
@Inject(at = @At("HEAD"), method = "Lnet/minecraft/item/BlockItem;place(Lnet/minecraft/item/ItemPlacementContext;)Lnet/minecraft/util/ActionResult;")
|
|
private void BlockItem_place_head(ItemPlacementContext context, CallbackInfoReturnable<ActionResult> info) {
|
|
lastPlacedItem = context.getStack().getItem();
|
|
}
|
|
@Inject(at = @At("TAIL"), method = "Lnet/minecraft/item/BlockItem;place(Lnet/minecraft/item/ItemPlacementContext;)Lnet/minecraft/util/ActionResult;")
|
|
private void mixin_BlockItem_place_tail(ItemPlacementContext context, CallbackInfoReturnable<ActionResult> info) {
|
|
// Early return if the block place action would fail
|
|
if (info.getReturnValue() != ActionResult.SUCCESS) return;
|
|
|
|
// Check if the stack is not empty, return if so
|
|
if (context.getStack().getCount() != 0) return;
|
|
|
|
// Try to replace the hotbar slot
|
|
HotbarReplace.tryReplaceSlot(context, lastPlacedItem);
|
|
}
|
|
}
|