HTTPS
https://git.nageyqma.icu/nageyqma/blade-addons-next.git
SSH
git@git.nageyqma.icu:nageyqma/blade-addons-next.git
HTTPS 链接可直接 git clone;推送代码请使用 SSH。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
package blade.addon.mixin;
import blade.addon.features.item.DropAnimation;
import com.llamalad7.mixinextras.sugar.Local;
import net.minecraft.client.player.FirstPersonHandsAndItems;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
/**
* 26.3 split the old net.minecraft.client.renderer.ItemInHandRenderer: the held item state
* (mainHandItem / mainHandHeight and the per-tick update) now lives in
* net.minecraft.client.player.FirstPersonHandsAndItems, while the actual rendering moved to
* net.minecraft.client.renderer.FirstPersonHandsAndItemsRenderer.
*/
@Mixin(FirstPersonHandsAndItems.class)
public abstract class FirstPersonHandsAndItemsMixin {
@Shadow
private ItemStack mainHandItem;
@Shadow
private float mainHandHeight;
@Inject(method = "tick", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/client/player/LocalPlayer;getMainHandItem()Lnet/minecraft/world/item/ItemStack;"))
private void test(CallbackInfo ci, @Local LocalPlayer clientPlayer, @Local ItemStack itemStack) {
if (!DropAnimation.shouldProceed()) return;
if (itemStack.getItem() == Items.AIR) return;
ItemStack prevDropped = DropAnimation.getPrevDroppedItem();
int slot = DropAnimation.getSelectedSlot();
if (prevDropped == null) return;
//check if item has changed
if (prevDropped.getItem() != itemStack.getItem()) {
DropAnimation.clearData();
}
//check if slot has changed
if (slot != clientPlayer.getInventory().getSelectedSlot()) {
DropAnimation.clearData();
}
}
@Inject(method = "tick", at = @At("TAIL"))
private void changeHeld(CallbackInfo ci) {
if (!DropAnimation.shouldProceed()) return;
ItemStack stack = DropAnimation.getPrevDroppedItem();
if (stack == null) return;
if (stack.getItem() == Items.AIR) return;
mainHandItem = stack;
this.mainHandHeight = 1;
}
}