HTTPS
https://git.nageyqma.icu/nageyqma/blade-addons-next.git
SSH
git@git.nageyqma.icu:nageyqma/blade-addons-next.git
HTTPS 链接可直接 git clone;推送代码请使用 SSH。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
package blade.addon.mixin;
import blade.addon.features.item.DropAnimation;
import blade.addon.utils.events.Events;
import blade.addon.utils.events.interfaces.WorldEvent;
import com.llamalad7.mixinextras.sugar.Local;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult;
import org.jetbrains.annotations.Nullable;
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;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(Minecraft.class)
public class MinecraftMixin {
@Shadow
@Nullable
public HitResult hitResult;
@Inject(method = "startUseItem", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/item/ItemStack;getCount()I"), cancellable = true)
private void testInteractionBlock(CallbackInfo ci, @Local ItemStack itemStack) {
BlockHitResult blockHitResult = (BlockHitResult) this.hitResult;
if (blockHitResult == null) return;
if (Events.ON_BLOCK_INTERACTION.invoke(blockInteractionEvent -> blockInteractionEvent.interact(blockHitResult, itemStack))) {
ci.cancel();
}
}
@Inject(method = "startAttack", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/HitResult;getType()Lnet/minecraft/world/phys/HitResult$Type;"))
private void onHit(CallbackInfoReturnable<Boolean> cir) {
DropAnimation.clearData();
}
// 26.3 keeps two updateLevelInEngines overloads, so spell out the descriptor.
@Inject(method = "updateLevelInEngines(Lnet/minecraft/client/multiplayer/ClientLevel;)V", at = @At(value = "TAIL"))
private void onWorld(ClientLevel world, CallbackInfo ci) {
Events.ON_WORLD_CHANGE.invoke(WorldEvent::onWorldSwap);
}
}