using System;
using System.Reflection;
using HarmonyLib;
using NitroxClient.Communication.Abstract;
using NitroxModel.Helper;
using NitroxModel.Packets;
using NitroxModel.Server;
namespace NitroxPatcher.Patches.Dynamic;
///
public sealed class GameModeConsoleCommands_OnConsoleCommand_Patch : NitroxPatch, IDynamicPatch
{
public static readonly MethodInfo TARGET_METHOD_SURVIVAL = Reflect.Method((GameModeConsoleCommands t) => t.OnConsoleCommand_survival());
public static readonly MethodInfo TARGET_METHOD_CREATIVE = Reflect.Method((GameModeConsoleCommands t) => t.OnConsoleCommand_creative());
public static readonly MethodInfo TARGET_METHOD_FREEDOM = Reflect.Method((GameModeConsoleCommands t) => t.OnConsoleCommand_freedom());
public static readonly MethodInfo TARGET_METHOD_HARDCORE = Reflect.Method((GameModeConsoleCommands t) => t.OnConsoleCommand_hardcore());
public static bool PrefixSurvival() => BroadcastGameModeChange(NitroxGameMode.SURVIVAL);
public static bool PrefixCreative() => BroadcastGameModeChange(NitroxGameMode.CREATIVE);
public static bool PrefixFreedom() => BroadcastGameModeChange(NitroxGameMode.FREEDOM);
public static bool PrefixHardcore() => BroadcastGameModeChange(NitroxGameMode.HARDCORE);
private static bool BroadcastGameModeChange(NitroxGameMode gameMode)
{
Resolve().Send(new ServerCommand($"gamemode {gameMode}"));
return false;
}
public override void Patch(Harmony harmony)
{
PatchPrefix(harmony, TARGET_METHOD_SURVIVAL, ((Func)PrefixSurvival).Method);
PatchPrefix(harmony, TARGET_METHOD_CREATIVE, ((Func)PrefixCreative).Method);
PatchPrefix(harmony, TARGET_METHOD_FREEDOM, ((Func)PrefixFreedom).Method);
PatchPrefix(harmony, TARGET_METHOD_HARDCORE, ((Func)PrefixHardcore).Method);
}
}