nageyqma·git
HTTPS https://git.nageyqma.icu/nageyqma/blade-addons-next.git SSH git@git.nageyqma.icu:nageyqma/blade-addons-next.git

HTTPS 链接可直接 git clone;推送代码请使用 SSH。

2.0 KB · 46 行raw
12345678910111213141516171819202122232425262728293031323334353637383940414243444546
package blade.addon.mixin;

import blade.addon.features.item.DropAnimation;
import blade.addon.features.item.ProtectItem;
import blade.addon.features.other.pet.SelectedPet;
import blade.addon.utils.config.values.Dungeons;
import com.llamalad7.mixinextras.sugar.Local;
import net.minecraft.client.multiplayer.MultiPlayerGameMode;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.ContainerInput;
import net.minecraft.world.item.ItemStack;
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.CallbackInfo;

@Mixin(MultiPlayerGameMode.class)
public class MultiPlayerGameModeMixin {

    @Inject(method = "handleContainerInput", at=@At("HEAD"))
    public void handleInventoryMouseClick(int container, int slotId, int button, ContainerInput containerInput, Player player, CallbackInfo ci) {
        SelectedPet.testLoadoutClick(container, slotId, button, containerInput, player);
    }

    // 26.3 moved the drop handling from LocalPlayer#drop(boolean) to
    // MultiPlayerGameMode#dropItem(LocalPlayer, boolean) (see LocalPlayerMixin for 26.2).
    @Inject(method = "dropItem", at = @At("HEAD"), cancellable = true)
    public void protectItem(LocalPlayer player, boolean entireStack, CallbackInfo ci) {
        if (Dungeons.dontProtectHeldItem && ProtectItem.isInADungeon()) return;

        if (ProtectItem.protect(player.getInventory().getSelectedItem())) {
            ci.cancel();
        }
    }

    @Inject(method = "dropItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V"))
    public void getDropped(LocalPlayer player, boolean entireStack, CallbackInfo ci, @Local ItemStack itemStack) {
        if (!DropAnimation.shouldProceed()) return;

        int slot = player.getInventory().getSelectedSlot();
        DropAnimation.setDroppedData(itemStack, slot);
    }

}