mirror of
https://github.com/smartcmd/MinecraftConsoles.git
synced 2026-04-25 08:27:28 +00:00
198 lines
12 KiB
C#
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);
|
|
}
|
|
}
|