diff --git a/src/main/java/org/auioc/mcmod/arnicalib/mod/client/event/AHClientEventFactory.java b/src/main/java/org/auioc/mcmod/arnicalib/mod/client/event/AHClientEventFactory.java new file mode 100644 index 00000000..975b989a --- /dev/null +++ b/src/main/java/org/auioc/mcmod/arnicalib/mod/client/event/AHClientEventFactory.java @@ -0,0 +1,19 @@ +package org.auioc.mcmod.arnicalib.mod.client.event; + +import org.auioc.mcmod.arnicalib.game.event.client.ClientPermissionsChangedEvent; +import net.minecraft.client.player.LocalPlayer; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.eventbus.api.IEventBus; + +@OnlyIn(Dist.CLIENT) +public class AHClientEventFactory { + + private static final IEventBus BUS = MinecraftForge.EVENT_BUS; + + public static void onPermissionChanged(LocalPlayer player, int oldLevel, int newLevel) { + BUS.post(new ClientPermissionsChangedEvent(player, oldLevel, newLevel)); + } + +} diff --git a/src/main/java/org/auioc/mcmod/arnicalib/mod/mixin/client/MixinLocalPlayer.java b/src/main/java/org/auioc/mcmod/arnicalib/mod/mixin/client/MixinLocalPlayer.java new file mode 100644 index 00000000..e8c6fdd1 --- /dev/null +++ b/src/main/java/org/auioc/mcmod/arnicalib/mod/mixin/client/MixinLocalPlayer.java @@ -0,0 +1,27 @@ +package org.auioc.mcmod.arnicalib.mod.mixin.client; + +import org.auioc.mcmod.arnicalib.mod.client.event.AHClientEventFactory; +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 net.minecraft.client.player.LocalPlayer; + +@Mixin(value = LocalPlayer.class) +public class MixinLocalPlayer { + + @Shadow + private int permissionLevel; + + @Inject( + method = "Lnet/minecraft/client/player/LocalPlayer;setPermissionLevel(I)V", + at = @At(value = "HEAD"), + require = 1, + allow = 1 + ) + private void setPermissionLevel(int p_108649_, CallbackInfo ci) { + AHClientEventFactory.onPermissionChanged(((LocalPlayer) (Object) this), this.permissionLevel, p_108649_); + } + +} diff --git a/src/main/resources/arnicalib.mixin.json b/src/main/resources/arnicalib.mixin.json index b8f2afb3..6e7e068c 100644 --- a/src/main/resources/arnicalib.mixin.json +++ b/src/main/resources/arnicalib.mixin.json @@ -11,7 +11,7 @@ "server.MixinServerLifecycleHooks", "server.MixinLootContext" ], - "client": [], + "client": ["client.MixinLocalPlayer"], "server": [], "injectors": { "defaultRequire": 1