Ver Fonte

Backported #137 PR to 1.16 fabric:
Fixed PlayerAttackInvoker mixing loading crash on server side (#137)

Signed-off-by: apple <davidalb97@hotmail.com>

davidalb97 há 3 anos atrás
pai
commit
4d8303f749

+ 1 - 3
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/PlayerAttackInvoker.java

@@ -20,8 +20,6 @@
 package me.shedaniel.architectury.mixin.fabric;
 
 import me.shedaniel.architectury.event.events.EntityEvent;
-import net.minecraft.client.player.LocalPlayer;
-import net.minecraft.client.player.RemotePlayer;
 import net.minecraft.world.InteractionResult;
 import net.minecraft.world.damagesource.DamageSource;
 import net.minecraft.world.entity.LivingEntity;
@@ -31,7 +29,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<Boolean> cir) {

+ 41 - 0
fabric/src/main/java/me/shedaniel/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 me.shedaniel.architectury.mixin.fabric.client;
+
+import me.shedaniel.architectury.event.events.EntityEvent;
+import net.minecraft.client.player.LocalPlayer;
+import net.minecraft.client.player.RemotePlayer;
+import net.minecraft.world.InteractionResult;
+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<Boolean> cir) {
+        if (EntityEvent.LIVING_ATTACK.invoker().attack((LivingEntity) (Object) this, damageSource, f) == InteractionResult.FAIL && (Object) this instanceof Player) {
+            cir.setReturnValue(false);
+        }
+    }
+}

+ 2 - 1
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",