Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions CustomItemsAPI/EventHandlers/CoinHandler.cs
Original file line number Diff line number Diff line change
@@ -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<bool> isTailsHelper = new(ev.IsTails);
TypeWrapper<bool> 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);
}
}
19 changes: 19 additions & 0 deletions CustomItemsAPI/Events/CustomCoinEvents.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using CustomItemsAPI.Items;
using LabApi.Features.Wrappers;

namespace CustomItemsAPI.Events;

/// <summary>
/// Events for calling methods for <see cref="CustomCoinBase"/>.
/// </summary>
public static class CustomCoinEvents
{
public static event Action<CustomCoinBase, Player, CoinItem, TypeWrapper<bool>, TypeWrapper<bool>>? Flipping;

Check warning on line 11 in CustomItemsAPI/Events/CustomCoinEvents.cs

View workflow job for this annotation

GitHub Actions / build

Missing XML comment for publicly visible type or member 'CustomCoinEvents.Flipping'

Check warning on line 11 in CustomItemsAPI/Events/CustomCoinEvents.cs

View workflow job for this annotation

GitHub Actions / build

Missing XML comment for publicly visible type or member 'CustomCoinEvents.Flipping'
public static event Action<CustomCoinBase, Player, CoinItem, bool>? Flipped;

Check warning on line 12 in CustomItemsAPI/Events/CustomCoinEvents.cs

View workflow job for this annotation

GitHub Actions / build

Missing XML comment for publicly visible type or member 'CustomCoinEvents.Flipped'

Check warning on line 12 in CustomItemsAPI/Events/CustomCoinEvents.cs

View workflow job for this annotation

GitHub Actions / build

Missing XML comment for publicly visible type or member 'CustomCoinEvents.Flipped'

public static void OnFlipping(CustomCoinBase customItem, Player player, CoinItem coin, TypeWrapper<bool> isTails, TypeWrapper<bool> isAllowedHelper)

Check warning on line 14 in CustomItemsAPI/Events/CustomCoinEvents.cs

View workflow job for this annotation

GitHub Actions / build

Missing XML comment for publicly visible type or member 'CustomCoinEvents.OnFlipping(CustomCoinBase, Player, CoinItem, TypeWrapper<bool>, TypeWrapper<bool>)'

Check warning on line 14 in CustomItemsAPI/Events/CustomCoinEvents.cs

View workflow job for this annotation

GitHub Actions / build

Missing XML comment for publicly visible type or member 'CustomCoinEvents.OnFlipping(CustomCoinBase, Player, CoinItem, TypeWrapper<bool>, TypeWrapper<bool>)'
=> Flipping?.Invoke(customItem, player, coin, isTails, isAllowedHelper);

public static void OnFlipped(CustomCoinBase customItem, Player player, CoinItem coin, bool isTails)

Check warning on line 17 in CustomItemsAPI/Events/CustomCoinEvents.cs

View workflow job for this annotation

GitHub Actions / build

Missing XML comment for publicly visible type or member 'CustomCoinEvents.OnFlipped(CustomCoinBase, Player, CoinItem, bool)'

Check warning on line 17 in CustomItemsAPI/Events/CustomCoinEvents.cs

View workflow job for this annotation

GitHub Actions / build

Missing XML comment for publicly visible type or member 'CustomCoinEvents.OnFlipped(CustomCoinBase, Player, CoinItem, bool)'
=> Flipped?.Invoke(customItem, player, coin, isTails);
}
40 changes: 40 additions & 0 deletions CustomItemsAPI/Items/CustomCoinBase.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using LabApi.Features.Wrappers;

namespace CustomItemsAPI.Items;

/// <summary>
/// Custom <see cref="CoinItem"/> base.
/// </summary>
public abstract class CustomCoinBase : CustomItemBase
{
/// <inheritdoc/>
public override void Parse(Item item)
{
base.Parse(item);
if (item is not CoinItem)
throw new ArgumentException("CoinItem must not be null!");
}

/// <summary>
/// Called when a <paramref name="coinItem"/> is being flipped.
/// </summary>
/// <param name="player">The Player who called this function.</param>
/// <param name="coinItem">The Custom Coin Item</param>
/// <param name="isTails">Is resulting in tails.</param>
/// <param name="isAllowed">Can allow this action.</param>
public virtual void OnFlipping(Player player, CoinItem coinItem, TypeWrapper<bool> isTails, TypeWrapper<bool> isAllowed)
{
CL.Debug($"OnFlipping {player.PlayerId} {coinItem.Serial} {isTails.Value} {isAllowed.Value}", Main.Instance.Config.Debug);
}

/// <summary>
/// Called when a <paramref name="coinItem"/> has been flipped.
/// </summary>
/// <param name="player">The Player who called this function.</param>
/// <param name="coinItem">The Custom Coin Item</param>
/// <param name="isTails">Resulted in tails.</param>
public virtual void OnFlipped(Player player, CoinItem coinItem, bool isTails)
{
CL.Debug($"OnFlipped {player.PlayerId} {coinItem.Serial} {isTails}", Main.Instance.Config.Debug);
}
}
3 changes: 3 additions & 0 deletions CustomItemsAPI/Main.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ internal sealed class Main : Plugin<Config>
private readonly JailbirdHandler jailbirdHandler = new();
private readonly RevolverHandler revolverHandler = new();
private readonly Scp127Handler scp127Handler = new();
private readonly CoinHandler coinHandler = new();

public override void Enable()
{
Expand All @@ -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;
Expand All @@ -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;
Expand Down
Loading