MinecraftConsoles/Minecraft.Server.FourKit/NativeBridge.cs

198 lines
12 KiB
C#

using System.Runtime.InteropServices;
namespace Minecraft.Server.FourKit;
// EAT SHIT AND DIE
internal static class NativeBridge
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeDamageDelegate(int entityId, float amount);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeSetHealthDelegate(int entityId, float health);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeTeleportDelegate(int entityId, double x, double y, double z);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeSetGameModeDelegate(int entityId, int gameMode);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeBroadcastMessageDelegate(IntPtr utf8, int byteLen);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeSetFallDistanceDelegate(int entityId, float distance);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeGetPlayerSnapshotDelegate(int entityId, IntPtr outBuf);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeSendMessageDelegate(int entityId, IntPtr utf8, int byteLen);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeSetWalkSpeedDelegate(int entityId, float speed);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeTeleportEntityDelegate(int entityId, int dimId, double x, double y, double z);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate int NativeGetTileIdDelegate(int dimId, int x, int y, int z);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate int NativeGetTileDataDelegate(int dimId, int x, int y, int z);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeSetTileDelegate(int dimId, int x, int y, int z, int tileId, int data);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeSetTileDataDelegate(int dimId, int x, int y, int z, int data);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate int NativeBreakBlockDelegate(int dimId, int x, int y, int z);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate int NativeGetHighestBlockYDelegate(int dimId, int x, int z);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeGetWorldInfoDelegate(int dimId, IntPtr outBuf);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeSetWorldTimeDelegate(int dimId, long time);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeSetWeatherDelegate(int dimId, int storm, int thundering, int thunderDuration);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate int NativeCreateExplosionDelegate(int dimId, double x, double y, double z, float power, int setFire, int breakBlocks);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate int NativeStrikeLightningDelegate(int dimId, double x, double y, double z, int effectOnly);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate int NativeSetSpawnLocationDelegate(int dimId, int x, int y, int z);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeDropItemDelegate(int dimId, double x, double y, double z, int itemId, int count, int auxValue, int naturally);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeKickPlayerDelegate(int entityId, int reason);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate int NativeBanPlayerDelegate(int entityId, IntPtr reasonUtf8, int reasonByteLen);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate int NativeBanPlayerIpDelegate(int entityId, IntPtr reasonUtf8, int reasonByteLen);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate int NativeGetPlayerAddressDelegate(int entityId, IntPtr outIpBuf, int outIpBufSize, IntPtr outPort);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeGetPlayerInventoryDelegate(int entityId, IntPtr outBuffer);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeSetPlayerInventorySlotDelegate(int entityId, int slot, int itemId, int count, int aux);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeGetContainerContentsDelegate(int entityId, IntPtr outBuffer, int maxSlots);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeSetContainerSlotDelegate(int entityId, int slot, int itemId, int count, int aux);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeGetContainerViewerEntityIdsDelegate(int entityId, IntPtr outIds, int maxCount, IntPtr outCount);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeCloseContainerDelegate(int entityId);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void NativeOpenVirtualContainerDelegate(int entityId, int nativeType, IntPtr titleUtf8, int titleByteLen, int slotCount, IntPtr itemsBuf);
internal static NativeDamageDelegate? DamagePlayer;
internal static NativeSetHealthDelegate? SetPlayerHealth;
internal static NativeTeleportDelegate? TeleportPlayer;
internal static NativeSetGameModeDelegate? SetPlayerGameMode;
internal static NativeBroadcastMessageDelegate? BroadcastMessage;
internal static NativeSetFallDistanceDelegate? SetFallDistance;
internal static NativeGetPlayerSnapshotDelegate? GetPlayerSnapshot;
internal static NativeSendMessageDelegate? SendMessage;
internal static NativeSetWalkSpeedDelegate? SetWalkSpeed;
internal static NativeTeleportEntityDelegate? TeleportEntity;
internal static NativeGetTileIdDelegate? GetTileId;
internal static NativeGetTileDataDelegate? GetTileData;
internal static NativeSetTileDelegate? SetTile;
internal static NativeSetTileDataDelegate? SetTileData;
internal static NativeBreakBlockDelegate? BreakBlock;
internal static NativeGetHighestBlockYDelegate? GetHighestBlockY;
internal static NativeGetWorldInfoDelegate? GetWorldInfo;
internal static NativeSetWorldTimeDelegate? SetWorldTime;
internal static NativeSetWeatherDelegate? SetWeather;
internal static NativeCreateExplosionDelegate? CreateExplosion;
internal static NativeStrikeLightningDelegate? StrikeLightning;
internal static NativeSetSpawnLocationDelegate? SetSpawnLocation;
internal static NativeDropItemDelegate? DropItem;
internal static NativeKickPlayerDelegate? KickPlayer;
internal static NativeBanPlayerDelegate? BanPlayer;
internal static NativeBanPlayerIpDelegate? BanPlayerIp;
internal static NativeGetPlayerAddressDelegate? GetPlayerAddress;
internal static NativeGetPlayerInventoryDelegate? GetPlayerInventory;
internal static NativeSetPlayerInventorySlotDelegate? SetPlayerInventorySlot;
internal static NativeGetContainerContentsDelegate? GetContainerContents;
internal static NativeSetContainerSlotDelegate? SetContainerSlot;
internal static NativeGetContainerViewerEntityIdsDelegate? GetContainerViewerEntityIds;
internal static NativeCloseContainerDelegate? CloseContainer;
internal static NativeOpenVirtualContainerDelegate? OpenVirtualContainer;
internal static void SetCallbacks(IntPtr damage, IntPtr setHealth, IntPtr teleport, IntPtr setGameMode, IntPtr broadcastMessage, IntPtr setFallDistance, IntPtr getPlayerSnapshot, IntPtr sendMessage, IntPtr setWalkSpeed, IntPtr teleportEntity)
{
DamagePlayer = Marshal.GetDelegateForFunctionPointer<NativeDamageDelegate>(damage);
SetPlayerHealth = Marshal.GetDelegateForFunctionPointer<NativeSetHealthDelegate>(setHealth);
TeleportPlayer = Marshal.GetDelegateForFunctionPointer<NativeTeleportDelegate>(teleport);
SetPlayerGameMode = Marshal.GetDelegateForFunctionPointer<NativeSetGameModeDelegate>(setGameMode);
BroadcastMessage = Marshal.GetDelegateForFunctionPointer<NativeBroadcastMessageDelegate>(broadcastMessage);
SetFallDistance = Marshal.GetDelegateForFunctionPointer<NativeSetFallDistanceDelegate>(setFallDistance);
GetPlayerSnapshot = Marshal.GetDelegateForFunctionPointer<NativeGetPlayerSnapshotDelegate>(getPlayerSnapshot);
SendMessage = Marshal.GetDelegateForFunctionPointer<NativeSendMessageDelegate>(sendMessage);
SetWalkSpeed = Marshal.GetDelegateForFunctionPointer<NativeSetWalkSpeedDelegate>(setWalkSpeed);
TeleportEntity = Marshal.GetDelegateForFunctionPointer<NativeTeleportEntityDelegate>(teleportEntity);
}
internal static void SetWorldCallbacks(IntPtr getTileId, IntPtr getTileData, IntPtr setTile, IntPtr setTileData, IntPtr breakBlock, IntPtr getHighestBlockY, IntPtr getWorldInfo, IntPtr setWorldTime, IntPtr setWeather, IntPtr createExplosion, IntPtr strikeLightning, IntPtr setSpawnLocation, IntPtr dropItem)
{
GetTileId = Marshal.GetDelegateForFunctionPointer<NativeGetTileIdDelegate>(getTileId);
GetTileData = Marshal.GetDelegateForFunctionPointer<NativeGetTileDataDelegate>(getTileData);
SetTile = Marshal.GetDelegateForFunctionPointer<NativeSetTileDelegate>(setTile);
SetTileData = Marshal.GetDelegateForFunctionPointer<NativeSetTileDataDelegate>(setTileData);
BreakBlock = Marshal.GetDelegateForFunctionPointer<NativeBreakBlockDelegate>(breakBlock);
GetHighestBlockY = Marshal.GetDelegateForFunctionPointer<NativeGetHighestBlockYDelegate>(getHighestBlockY);
GetWorldInfo = Marshal.GetDelegateForFunctionPointer<NativeGetWorldInfoDelegate>(getWorldInfo);
SetWorldTime = Marshal.GetDelegateForFunctionPointer<NativeSetWorldTimeDelegate>(setWorldTime);
SetWeather = Marshal.GetDelegateForFunctionPointer<NativeSetWeatherDelegate>(setWeather);
CreateExplosion = Marshal.GetDelegateForFunctionPointer<NativeCreateExplosionDelegate>(createExplosion);
StrikeLightning = Marshal.GetDelegateForFunctionPointer<NativeStrikeLightningDelegate>(strikeLightning);
SetSpawnLocation = Marshal.GetDelegateForFunctionPointer<NativeSetSpawnLocationDelegate>(setSpawnLocation);
DropItem = Marshal.GetDelegateForFunctionPointer<NativeDropItemDelegate>(dropItem);
}
internal static void SetPlayerCallbacks(IntPtr kickPlayer, IntPtr banPlayer, IntPtr banPlayerIp, IntPtr getPlayerAddress)
{
KickPlayer = Marshal.GetDelegateForFunctionPointer<NativeKickPlayerDelegate>(kickPlayer);
BanPlayer = Marshal.GetDelegateForFunctionPointer<NativeBanPlayerDelegate>(banPlayer);
BanPlayerIp = Marshal.GetDelegateForFunctionPointer<NativeBanPlayerIpDelegate>(banPlayerIp);
GetPlayerAddress = Marshal.GetDelegateForFunctionPointer<NativeGetPlayerAddressDelegate>(getPlayerAddress);
}
internal static void SetInventoryCallbacks(IntPtr getPlayerInventory, IntPtr setPlayerInventorySlot, IntPtr getContainerContents, IntPtr setContainerSlot, IntPtr getContainerViewerEntityIds, IntPtr closeContainer, IntPtr openVirtualContainer)
{
GetPlayerInventory = Marshal.GetDelegateForFunctionPointer<NativeGetPlayerInventoryDelegate>(getPlayerInventory);
SetPlayerInventorySlot = Marshal.GetDelegateForFunctionPointer<NativeSetPlayerInventorySlotDelegate>(setPlayerInventorySlot);
GetContainerContents = Marshal.GetDelegateForFunctionPointer<NativeGetContainerContentsDelegate>(getContainerContents);
SetContainerSlot = Marshal.GetDelegateForFunctionPointer<NativeSetContainerSlotDelegate>(setContainerSlot);
GetContainerViewerEntityIds = Marshal.GetDelegateForFunctionPointer<NativeGetContainerViewerEntityIdsDelegate>(getContainerViewerEntityIds);
CloseContainer = Marshal.GetDelegateForFunctionPointer<NativeCloseContainerDelegate>(closeContainer);
OpenVirtualContainer = Marshal.GetDelegateForFunctionPointer<NativeOpenVirtualContainerDelegate>(openVirtualContainer);
}
}