HTTPS
https://git.nageyqma.icu/nageyqma/blade-addons-next.git
SSH
git@git.nageyqma.icu:nageyqma/blade-addons-next.git
HTTPS 链接可直接 git clone;推送代码请使用 SSH。
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);
}
}