diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/PlayerAttackInvoker.java b/fabric/src/main/java/dev/architectury/mixin/fabric/PlayerAttackInvoker.java index dada8dab..3951daac 100644 --- a/fabric/src/main/java/dev/architectury/mixin/fabric/PlayerAttackInvoker.java +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/PlayerAttackInvoker.java @@ -20,8 +20,6 @@ package dev.architectury.mixin.fabric; import dev.architectury.event.events.common.EntityEvent; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.client.player.RemotePlayer; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; @@ -30,7 +28,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(value = {LocalPlayer.class, Player.class, RemotePlayer.class}) +@Mixin(value = {Player.class}) public class PlayerAttackInvoker { @Inject(method = "hurt", at = @At("HEAD"), cancellable = true) private void hurt(DamageSource damageSource, float f, CallbackInfoReturnable cir) { diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/client/ClientPlayerAttackInvoker.java b/fabric/src/main/java/dev/architectury/mixin/fabric/client/ClientPlayerAttackInvoker.java new file mode 100644 index 00000000..037ca90c --- /dev/null +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/client/ClientPlayerAttackInvoker.java @@ -0,0 +1,41 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021 architectury + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package dev.architectury.mixin.fabric.client; + +import dev.architectury.event.events.common.EntityEvent; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.player.RemotePlayer; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +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; + +@Mixin(value = {LocalPlayer.class, RemotePlayer.class}) +public class ClientPlayerAttackInvoker { + @Inject(method = "hurt", at = @At("HEAD"), cancellable = true) + private void hurt(DamageSource damageSource, float f, CallbackInfoReturnable cir) { + if (EntityEvent.LIVING_HURT.invoker().hurt((LivingEntity) (Object) this, damageSource, f).isFalse() && (Object) this instanceof Player) { + cir.setReturnValue(false); + } + } +} diff --git a/fabric/src/main/resources/architectury.mixins.json b/fabric/src/main/resources/architectury.mixins.json index 59818fa9..4738cb6c 100644 --- a/fabric/src/main/resources/architectury.mixins.json +++ b/fabric/src/main/resources/architectury.mixins.json @@ -16,7 +16,8 @@ "client.MixinMouseHandler", "client.MixinMultiPlayerGameMode", "client.MixinScreen", - "client.MixinTextureAtlas" + "client.MixinTextureAtlas", + "client.ClientPlayerAttackInvoker" ], "mixins": [ "ExplosionPreInvoker",