SRMP-Public/SRMP/Patches/Patch_SlimeFeeder.cs
2023-05-29 22:23:11 +02:00

61 lines
No EOL
1.9 KiB
C#

using HarmonyLib;
using SRMultiplayer.Networking;
using SRMultiplayer.Packets;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SRMultiplayer.Patches
{
[HarmonyPatch(typeof(SlimeFeeder))]
[HarmonyPatch("SetFeederSpeed")]
class SlimeFeeder_SetFeederSpeed
{
static void Prefix(SlimeFeeder __instance, SlimeFeeder.FeedSpeed speed)
{
if (!Globals.IsMultiplayer || Globals.HandlePacket) return;
var id = __instance.model.gameObj.GetComponent<LandPlotLocation>().id;
new PacketLandPlotFeederSpeed()
{
ID = id,
Speed = (byte)speed
}.Send();
}
}
[HarmonyPatch(typeof(SlimeFeeder))]
[HarmonyPatch("ProcessFeedOperation")]
class SlimeFeeder_ProcessFeedOperation
{
static bool Prefix(SlimeFeeder __instance, bool ejectFood)
{
if (!Globals.IsMultiplayer || Globals.HandlePacket) return true;
var netLandPlot = __instance.storage.model.gameObj.GetComponent<NetworkLandplot>();
if (netLandPlot != null && netLandPlot.IsLocal)
{
string plotid = netLandPlot.Location.id;
Ammo relevantAmmo = __instance.storage.GetRelevantAmmo();
relevantAmmo.SetAmmoSlot(0);
if (relevantAmmo.HasSelectedAmmo())
{
new PacketLandPlotSiloRemove()
{
ID = plotid,
SiloType = (byte)(__instance.storage == null ? 0 : __instance.storage.type),
CatcherType = 0,
Slot = 0
}.Send();
}
return true;
}
__instance.model.remainingFeedOperations = Math.Max(0, __instance.model.remainingFeedOperations - 1);
return false;
}
}
}