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 int NativeGetPlayerLatencyDelegate(int entityId); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate int NativeSendRawDelegate(int entityId, IntPtr dataBuf, int dataBufSize); [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); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate int NativeGetItemMetaDelegate(int entityId, int slot, IntPtr outBuf, int bufSize); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeSetItemMetaDelegate(int entityId, int slot, IntPtr inBuf, int bufSize); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeSetHeldItemSlotDelegate(int entityId, int slot); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeSetSneakingDelegate(int entityId, int sneak); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeSetVelocityDelegate(int entityId, double x, double y, double z); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeSetAllowFlightDelegate(int entityId, int allowFlight); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativePlaySoundDelegate(int entityId, int soundId, double x, double y, double z, float volume, float pitch); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeSetSleepingIgnoredDelegate(int entityId, int ignored); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeSetLevelDelegate(int entityId, int level); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeSetExpDelegate(int entityId, float exp); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeGiveExpDelegate(int entityId, int amount); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeGiveExpLevelsDelegate(int entityId, int amount); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeSetFoodLevelDelegate(int entityId, int foodLevel); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeSetSaturationDelegate(int entityId, float saturation); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeSetExhaustionDelegate(int entityId, float exhaustion); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeSpawnParticleDelegate(int entityId, int particleId, float x, float y, float z, float offsetX, float offsetY, float offsetZ, float speed, int count); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate int NativeSetPassengerDelegate(int entityId, int passengerEntityId); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate int NativeLeaveVehicleDelegate(int entityId); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate int NativeEjectDelegate(int entityId); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate int NativeGetVehicleIdDelegate(int entityId); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate int NativeGetPassengerIdDelegate(int entityId); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void NativeGetEntityInfoDelegate(int entityId, IntPtr outBuf); 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 NativeGetPlayerLatencyDelegate? GetPlayerLatency; internal static NativeSendRawDelegate? SendRaw; 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 NativeGetItemMetaDelegate? GetItemMeta; internal static NativeSetItemMetaDelegate? SetItemMeta; internal static NativeSetHeldItemSlotDelegate? SetHeldItemSlot; internal static NativeSetSneakingDelegate? SetSneaking; internal static NativeSetVelocityDelegate? SetVelocity; internal static NativeSetAllowFlightDelegate? SetAllowFlight; internal static NativePlaySoundDelegate? PlaySound; internal static NativeSetSleepingIgnoredDelegate? SetSleepingIgnored; internal static NativeSetLevelDelegate? SetLevel; internal static NativeSetExpDelegate? SetExp; internal static NativeGiveExpDelegate? GiveExp; internal static NativeGiveExpLevelsDelegate? GiveExpLevels; internal static NativeSetFoodLevelDelegate? SetFoodLevel; internal static NativeSetSaturationDelegate? SetSaturation; internal static NativeSetExhaustionDelegate? SetExhaustion; internal static NativeSpawnParticleDelegate? SpawnParticle; internal static NativeSetPassengerDelegate? SetPassenger; internal static NativeLeaveVehicleDelegate? LeaveVehicle; internal static NativeEjectDelegate? Eject; internal static NativeGetVehicleIdDelegate? GetVehicleId; internal static NativeGetPassengerIdDelegate? GetPassengerId; internal static NativeGetEntityInfoDelegate? GetEntityInfo; 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(damage); SetPlayerHealth = Marshal.GetDelegateForFunctionPointer(setHealth); TeleportPlayer = Marshal.GetDelegateForFunctionPointer(teleport); SetPlayerGameMode = Marshal.GetDelegateForFunctionPointer(setGameMode); BroadcastMessage = Marshal.GetDelegateForFunctionPointer(broadcastMessage); SetFallDistance = Marshal.GetDelegateForFunctionPointer(setFallDistance); GetPlayerSnapshot = Marshal.GetDelegateForFunctionPointer(getPlayerSnapshot); SendMessage = Marshal.GetDelegateForFunctionPointer(sendMessage); SetWalkSpeed = Marshal.GetDelegateForFunctionPointer(setWalkSpeed); TeleportEntity = Marshal.GetDelegateForFunctionPointer(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(getTileId); GetTileData = Marshal.GetDelegateForFunctionPointer(getTileData); SetTile = Marshal.GetDelegateForFunctionPointer(setTile); SetTileData = Marshal.GetDelegateForFunctionPointer(setTileData); BreakBlock = Marshal.GetDelegateForFunctionPointer(breakBlock); GetHighestBlockY = Marshal.GetDelegateForFunctionPointer(getHighestBlockY); GetWorldInfo = Marshal.GetDelegateForFunctionPointer(getWorldInfo); SetWorldTime = Marshal.GetDelegateForFunctionPointer(setWorldTime); SetWeather = Marshal.GetDelegateForFunctionPointer(setWeather); CreateExplosion = Marshal.GetDelegateForFunctionPointer(createExplosion); StrikeLightning = Marshal.GetDelegateForFunctionPointer(strikeLightning); SetSpawnLocation = Marshal.GetDelegateForFunctionPointer(setSpawnLocation); DropItem = Marshal.GetDelegateForFunctionPointer(dropItem); } internal static void SetPlayerCallbacks(IntPtr kickPlayer, IntPtr banPlayer, IntPtr banPlayerIp, IntPtr getPlayerAddress, IntPtr getPlayerLatency) { KickPlayer = Marshal.GetDelegateForFunctionPointer(kickPlayer); BanPlayer = Marshal.GetDelegateForFunctionPointer(banPlayer); BanPlayerIp = Marshal.GetDelegateForFunctionPointer(banPlayerIp); GetPlayerAddress = Marshal.GetDelegateForFunctionPointer(getPlayerAddress); GetPlayerLatency = Marshal.GetDelegateForFunctionPointer(getPlayerLatency); } internal static void SetPlayerConnectionCallbacks(IntPtr sendRaw) { SendRaw = Marshal.GetDelegateForFunctionPointer(sendRaw); } internal static void SetInventoryCallbacks(IntPtr getPlayerInventory, IntPtr setPlayerInventorySlot, IntPtr getContainerContents, IntPtr setContainerSlot, IntPtr getContainerViewerEntityIds, IntPtr closeContainer, IntPtr openVirtualContainer, IntPtr getItemMeta, IntPtr setItemMeta, IntPtr setHeldItemSlot) { GetPlayerInventory = Marshal.GetDelegateForFunctionPointer(getPlayerInventory); SetPlayerInventorySlot = Marshal.GetDelegateForFunctionPointer(setPlayerInventorySlot); GetContainerContents = Marshal.GetDelegateForFunctionPointer(getContainerContents); SetContainerSlot = Marshal.GetDelegateForFunctionPointer(setContainerSlot); GetContainerViewerEntityIds = Marshal.GetDelegateForFunctionPointer(getContainerViewerEntityIds); CloseContainer = Marshal.GetDelegateForFunctionPointer(closeContainer); OpenVirtualContainer = Marshal.GetDelegateForFunctionPointer(openVirtualContainer); GetItemMeta = Marshal.GetDelegateForFunctionPointer(getItemMeta); SetItemMeta = Marshal.GetDelegateForFunctionPointer(setItemMeta); SetHeldItemSlot = Marshal.GetDelegateForFunctionPointer(setHeldItemSlot); } internal static void SetEntityCallbacks(IntPtr setSneaking, IntPtr setVelocity, IntPtr setAllowFlight, IntPtr playSound, IntPtr setSleepingIgnored) { SetSneaking = Marshal.GetDelegateForFunctionPointer(setSneaking); SetVelocity = Marshal.GetDelegateForFunctionPointer(setVelocity); SetAllowFlight = Marshal.GetDelegateForFunctionPointer(setAllowFlight); PlaySound = Marshal.GetDelegateForFunctionPointer(playSound); SetSleepingIgnored = Marshal.GetDelegateForFunctionPointer(setSleepingIgnored); } internal static void SetExperienceCallbacks(IntPtr setLevel, IntPtr setExp, IntPtr giveExp, IntPtr giveExpLevels, IntPtr setFoodLevel, IntPtr setSaturation, IntPtr setExhaustion) { SetLevel = Marshal.GetDelegateForFunctionPointer(setLevel); SetExp = Marshal.GetDelegateForFunctionPointer(setExp); GiveExp = Marshal.GetDelegateForFunctionPointer(giveExp); GiveExpLevels = Marshal.GetDelegateForFunctionPointer(giveExpLevels); SetFoodLevel = Marshal.GetDelegateForFunctionPointer(setFoodLevel); SetSaturation = Marshal.GetDelegateForFunctionPointer(setSaturation); SetExhaustion = Marshal.GetDelegateForFunctionPointer(setExhaustion); } internal static void SetParticleCallbacks(IntPtr spawnParticle) { SpawnParticle = Marshal.GetDelegateForFunctionPointer(spawnParticle); } internal static void SetVehicleCallbacks(IntPtr setPassenger, IntPtr leaveVehicle, IntPtr eject, IntPtr getVehicleId, IntPtr getPassengerId, IntPtr getEntityInfo) { SetPassenger = Marshal.GetDelegateForFunctionPointer(setPassenger); LeaveVehicle = Marshal.GetDelegateForFunctionPointer(leaveVehicle); Eject = Marshal.GetDelegateForFunctionPointer(eject); GetVehicleId = Marshal.GetDelegateForFunctionPointer(getVehicleId); GetPassengerId = Marshal.GetDelegateForFunctionPointer(getPassengerId); GetEntityInfo = Marshal.GetDelegateForFunctionPointer(getEntityInfo); } }