From 50745d792332b0afbe639efff4664ac4ec960b1d Mon Sep 17 00:00:00 2001 From: videogame hacker Date: Sun, 10 Apr 2022 17:33:35 +0100 Subject: [PATCH 1/2] Safe-cast to ServerPlayerEntity --- .../samo_lego/simpleauth/mixin/MixinSlot.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/common/src/main/java/org/samo_lego/simpleauth/mixin/MixinSlot.java b/common/src/main/java/org/samo_lego/simpleauth/mixin/MixinSlot.java index b781d5b..3ca726e 100644 --- a/common/src/main/java/org/samo_lego/simpleauth/mixin/MixinSlot.java +++ b/common/src/main/java/org/samo_lego/simpleauth/mixin/MixinSlot.java @@ -16,19 +16,20 @@ public abstract class MixinSlot { // Denying item moving etc. @Inject(method = "canTakeItems(Lnet/minecraft/entity/player/PlayerEntity;)Z", at = @At(value = "HEAD"), cancellable = true) private void canTakeItems(PlayerEntity playerEntity, CallbackInfoReturnable cir) { - ServerPlayerEntity player = (ServerPlayerEntity) playerEntity; - ActionResult result = AuthEventHandler.onTakeItem(player); + if (playerEntity instanceof ServerPlayerEntity player) { + ActionResult result = AuthEventHandler.onTakeItem(player); - if (result == ActionResult.FAIL) { - // Canceling the item taking - player.networkHandler.sendPacket( - new ScreenHandlerSlotUpdateS2CPacket( - -2, - 0, - player.getInventory().selectedSlot, - player.getInventory().getStack(player.getInventory().selectedSlot)) - ); - cir.setReturnValue(false); + if (result == ActionResult.FAIL) { + // Canceling the item taking + player.networkHandler.sendPacket( + new ScreenHandlerSlotUpdateS2CPacket( + -2, + 0, + player.getInventory().selectedSlot, + player.getInventory().getStack(player.getInventory().selectedSlot)) + ); + cir.setReturnValue(false); + } } } } From c79e43c318e698f92548cb6756f11bd72fd0333b Mon Sep 17 00:00:00 2001 From: videogame hacker Date: Sun, 10 Apr 2022 17:48:34 +0100 Subject: [PATCH 2/2] Don't do Forge events when clientside --- .../main/java/org/samo_lego/simpleauth/SimpleAuthForge.java | 4 +++- .../org/samo_lego/simpleauth/event/AuthEventHandlerForge.java | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/forge/src/main/java/org/samo_lego/simpleauth/SimpleAuthForge.java b/forge/src/main/java/org/samo_lego/simpleauth/SimpleAuthForge.java index 8bf5355..0c27d84 100644 --- a/forge/src/main/java/org/samo_lego/simpleauth/SimpleAuthForge.java +++ b/forge/src/main/java/org/samo_lego/simpleauth/SimpleAuthForge.java @@ -2,9 +2,11 @@ package org.samo_lego.simpleauth; import com.mojang.brigadier.CommandDispatcher; import net.minecraft.server.command.ServerCommandSource; +import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.RegisterCommandsEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.server.ServerStoppedEvent; import net.minecraftforge.fml.loading.FMLPaths; @@ -15,7 +17,7 @@ import org.samo_lego.simpleauth.commands.*; public class SimpleAuthForge { public SimpleAuthForge() { SimpleAuth.init(FMLPaths.GAMEDIR.get()); - MinecraftForge.EVENT_BUS.register(this); + DistExecutor.safeRunWhenOn(Dist.DEDICATED_SERVER, () -> () -> MinecraftForge.EVENT_BUS.register(this)); } @SubscribeEvent diff --git a/forge/src/main/java/org/samo_lego/simpleauth/event/AuthEventHandlerForge.java b/forge/src/main/java/org/samo_lego/simpleauth/event/AuthEventHandlerForge.java index 036752e..bcdb6ee 100644 --- a/forge/src/main/java/org/samo_lego/simpleauth/event/AuthEventHandlerForge.java +++ b/forge/src/main/java/org/samo_lego/simpleauth/event/AuthEventHandlerForge.java @@ -2,6 +2,7 @@ package org.samo_lego.simpleauth.event; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.ActionResult; +import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.event.entity.player.AttackEntityEvent; import net.minecraftforge.event.entity.player.PlayerContainerEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; @@ -15,7 +16,7 @@ import static org.samo_lego.simpleauth.SimpleAuth.MOD_ID; * This class will take care of actions players try to do, * and cancel them if they aren't authenticated */ -@Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE) +@Mod.EventBusSubscriber(value = Dist.DEDICATED_SERVER, modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE) public class AuthEventHandlerForge { @SubscribeEvent(priority = HIGHEST) public static void onContainerOpen(PlayerContainerEvent.Open event) {