diff --git a/CustomItemsAPI/EventHandlers/CoinHandler.cs b/CustomItemsAPI/EventHandlers/CoinHandler.cs new file mode 100644 index 0000000..78d89e6 --- /dev/null +++ b/CustomItemsAPI/EventHandlers/CoinHandler.cs @@ -0,0 +1,29 @@ +using CustomItemsAPI.Events; +using CustomItemsAPI.Items; +using LabApi.Events.Arguments.PlayerEvents; +using LabApi.Events.CustomHandlers; + +namespace CustomItemsAPI.EventHandlers; + +internal sealed class CoinHandler : CustomEventsHandler +{ + public override void OnPlayerFlippingCoin(PlayerFlippingCoinEventArgs ev) + { + if (!CustomItems.TryGetCustomItem(ev.CoinItem, out CustomCoinBase cur_item)) + return; + TypeWrapper isTailsHelper = new(ev.IsTails); + TypeWrapper isAllowedHelper = new(ev.IsAllowed); + CustomCoinEvents.OnFlipping(cur_item, ev.Player, ev.CoinItem, isTailsHelper, isAllowedHelper); + cur_item.OnFlipping(ev.Player, ev.CoinItem, isTailsHelper, isAllowedHelper); + ev.IsTails = isTailsHelper.Value; + ev.IsAllowed = isAllowedHelper.Value; + } + + public override void OnPlayerFlippedCoin(PlayerFlippedCoinEventArgs ev) + { + if (!CustomItems.TryGetCustomItem(ev.CoinItem, out CustomCoinBase cur_item)) + return; + CustomCoinEvents.OnFlipped(cur_item, ev.Player, ev.CoinItem, ev.IsTails); + cur_item.OnFlipped(ev.Player, ev.CoinItem, ev.IsTails); + } +} \ No newline at end of file diff --git a/CustomItemsAPI/Events/CustomCoinEvents.cs b/CustomItemsAPI/Events/CustomCoinEvents.cs new file mode 100644 index 0000000..fa12dd4 --- /dev/null +++ b/CustomItemsAPI/Events/CustomCoinEvents.cs @@ -0,0 +1,19 @@ +using CustomItemsAPI.Items; +using LabApi.Features.Wrappers; + +namespace CustomItemsAPI.Events; + +/// +/// Events for calling methods for . +/// +public static class CustomCoinEvents +{ + public static event Action, TypeWrapper>? Flipping; + public static event Action? Flipped; + + public static void OnFlipping(CustomCoinBase customItem, Player player, CoinItem coin, TypeWrapper isTails, TypeWrapper isAllowedHelper) + => Flipping?.Invoke(customItem, player, coin, isTails, isAllowedHelper); + + public static void OnFlipped(CustomCoinBase customItem, Player player, CoinItem coin, bool isTails) + => Flipped?.Invoke(customItem, player, coin, isTails); +} \ No newline at end of file diff --git a/CustomItemsAPI/Items/CustomCoinBase.cs b/CustomItemsAPI/Items/CustomCoinBase.cs new file mode 100644 index 0000000..cfeab34 --- /dev/null +++ b/CustomItemsAPI/Items/CustomCoinBase.cs @@ -0,0 +1,40 @@ +using LabApi.Features.Wrappers; + +namespace CustomItemsAPI.Items; + +/// +/// Custom base. +/// +public abstract class CustomCoinBase : CustomItemBase +{ + /// + public override void Parse(Item item) + { + base.Parse(item); + if (item is not CoinItem) + throw new ArgumentException("CoinItem must not be null!"); + } + + /// + /// Called when a is being flipped. + /// + /// The Player who called this function. + /// The Custom Coin Item + /// Is resulting in tails. + /// Can allow this action. + public virtual void OnFlipping(Player player, CoinItem coinItem, TypeWrapper isTails, TypeWrapper isAllowed) + { + CL.Debug($"OnFlipping {player.PlayerId} {coinItem.Serial} {isTails.Value} {isAllowed.Value}", Main.Instance.Config.Debug); + } + + /// + /// Called when a has been flipped. + /// + /// The Player who called this function. + /// The Custom Coin Item + /// Resulted in tails. + public virtual void OnFlipped(Player player, CoinItem coinItem, bool isTails) + { + CL.Debug($"OnFlipped {player.PlayerId} {coinItem.Serial} {isTails}", Main.Instance.Config.Debug); + } +} diff --git a/CustomItemsAPI/Main.cs b/CustomItemsAPI/Main.cs index b083a9c..62b47d8 100644 --- a/CustomItemsAPI/Main.cs +++ b/CustomItemsAPI/Main.cs @@ -31,6 +31,7 @@ internal sealed class Main : Plugin private readonly JailbirdHandler jailbirdHandler = new(); private readonly RevolverHandler revolverHandler = new(); private readonly Scp127Handler scp127Handler = new(); + private readonly CoinHandler coinHandler = new(); public override void Enable() { @@ -46,6 +47,7 @@ public override void Enable() CustomHandlersManager.RegisterEventsHandler(jailbirdHandler); CustomHandlersManager.RegisterEventsHandler(revolverHandler); CustomHandlersManager.RegisterEventsHandler(scp127Handler); + CustomHandlersManager.RegisterEventsHandler(coinHandler); InventoryExtensions.OnItemRemoved += Subscribed.OnItemRemoved; ThrownProjectile.OnProjectileSpawned += Subscribed.ProjectileSpawned; CycleController.OnPhaseChanged += Subscribed.PhaseChanged; @@ -66,6 +68,7 @@ public override void Disable() CustomHandlersManager.UnregisterEventsHandler(jailbirdHandler); CustomHandlersManager.UnregisterEventsHandler(revolverHandler); CustomHandlersManager.UnregisterEventsHandler(scp127Handler); + CustomHandlersManager.UnregisterEventsHandler(coinHandler); InventoryExtensions.OnItemRemoved -= Subscribed.OnItemRemoved; ThrownProjectile.OnProjectileSpawned -= Subscribed.ProjectileSpawned; CycleController.OnPhaseChanged -= Subscribed.PhaseChanged;