From a6889af2eba4caca4a948a1018e9d4ecc89eeea4 Mon Sep 17 00:00:00 2001 From: Kadava Date: Wed, 11 Mar 2026 21:27:02 +0000 Subject: [PATCH 1/4] Added OnPlayerHurting event to custom armour items --- CustomItemsAPI/EventHandlers/DamageHandler.cs | 27 ++++++++++--- CustomItemsAPI/Events/CustomItemEvents.cs | 40 ++++++++++--------- CustomItemsAPI/Items/CustomArmorBase.cs | 17 +++++++- 3 files changed, 60 insertions(+), 24 deletions(-) diff --git a/CustomItemsAPI/EventHandlers/DamageHandler.cs b/CustomItemsAPI/EventHandlers/DamageHandler.cs index ea7967e..6e64fc9 100644 --- a/CustomItemsAPI/EventHandlers/DamageHandler.cs +++ b/CustomItemsAPI/EventHandlers/DamageHandler.cs @@ -1,5 +1,7 @@ using CustomItemsAPI.Events; +using CustomItemsAPI.Extensions; using CustomItemsAPI.Items; +using InventorySystem.Items.Armor; using LabApi.Events.Arguments.PlayerEvents; using LabApi.Events.CustomHandlers; using PlayerStatsSystem; @@ -22,12 +24,27 @@ public override void OnPlayerHurting(PlayerHurtingEventArgs ev) return; if (firearmDamageHandler.Firearm == null) return; - if (!CustomItems.TryGetCustomItem(firearmDamageHandler.Firearm.ItemSerial, out CustomFirearmBase cur_item)) + + if (CustomItems.TryGetCustomItem(firearmDamageHandler.Firearm.ItemSerial, out CustomFirearmBase cur_item)) + { + TypeWrapper isAllowedHelper = new(ev.IsAllowed); + CustomFirearmEvents.OnHurting(cur_item, ev.Player, ev.Attacker, firearmDamageHandler, isAllowedHelper); + cur_item.OnHurting(ev.Player, ev.Attacker, firearmDamageHandler, isAllowedHelper); + ev.IsAllowed = isAllowedHelper.Value; + return; + } + + if (!ev.Player.Inventory.TryGetBodyArmor(out _)) + return; + + CL.Debug($"OnPlayerHurting {ev.Player.DisplayName} ARMOUR"); + if (CustomItems.TryGetCustomItem(item: ev.Player.Items.Where(x => x.Type.IsArmor()).FirstOrDefault(), out CustomArmorBase cur_armor)) + { + CL.Debug($"OnPlayerHurting {ev.Player.DisplayName} CUSTOM ITEM {cur_armor}"); + CustomItemEvents.OnTakingDamage(cur_armor, ev.Player, ev.Attacker, ev.DamageHandler); + cur_armor.OnTakingDamage(ev.Player, ev.Attacker, firearmDamageHandler); return; - TypeWrapper isAllowedHelper = new(ev.IsAllowed); - CustomFirearmEvents.OnHurting(cur_item, ev.Player, ev.Attacker, firearmDamageHandler, isAllowedHelper); - cur_item.OnHurting(ev.Player, ev.Attacker, firearmDamageHandler, isAllowedHelper); - ev.IsAllowed = isAllowedHelper.Value; + } } public override void OnPlayerHurt(PlayerHurtEventArgs ev) diff --git a/CustomItemsAPI/Events/CustomItemEvents.cs b/CustomItemsAPI/Events/CustomItemEvents.cs index f6956d4..9e21a88 100644 --- a/CustomItemsAPI/Events/CustomItemEvents.cs +++ b/CustomItemsAPI/Events/CustomItemEvents.cs @@ -2,6 +2,7 @@ using InventorySystem.Items; using InventorySystem.Items.Pickups; using LabApi.Features.Wrappers; +using PlayerStatsSystem; using Scp914; using UnityEngine; @@ -31,43 +32,46 @@ public static class CustomItemEvents public static event Action, TypeWrapper>? ProcessingItem; public static event Action, TypeWrapper, TypeWrapper>? ProcessingPickup; public static event Action? Removed; + public static event Action? TakingDamage; - public static void OnRegistered(CustomItemBase customItem) + public static void OnRegistered(CustomItemBase customItem) => Registered?.Invoke(customItem); - public static void OnUnregistered(CustomItemBase customItem) + public static void OnUnregistered(CustomItemBase customItem) => Unregistered?.Invoke(customItem); - public static void OnNewCreated(CustomItemBase customItem) + public static void OnNewCreated(CustomItemBase customItem) => NewCreated?.Invoke(customItem); - public static void OnParsePickup(CustomItemBase customItem, Pickup pickup) + public static void OnParsePickup(CustomItemBase customItem, Pickup pickup) => ParsePickup?.Invoke(customItem, pickup); - public static void OnParseItem(CustomItemBase customItem, Item item) + public static void OnParseItem(CustomItemBase customItem, Item item) => ParseItem?.Invoke(customItem, item); - public static void OnDistribute(CustomItemBase customItem) + public static void OnDistribute(CustomItemBase customItem) => Distribute?.Invoke(customItem); - public static void OnChanged(CustomItemBase customItem, Player player, Item? oldItem, Item? newItem, bool changedToThisItem) + public static void OnChanged(CustomItemBase customItem, Player player, Item? oldItem, Item? newItem, bool changedToThisItem) => Changed?.Invoke(customItem, player, oldItem, newItem, changedToThisItem); public static void OnChanging(CustomItemBase customItem, Player player, Item? oldItem, Item? newItem, bool changedToThisItem, TypeWrapper isAllowed) => Changing?.Invoke(customItem, player, oldItem, newItem, changedToThisItem, isAllowed); - public static void OnDropped(CustomItemBase customItem, Player player, Pickup pickup) + public static void OnDropped(CustomItemBase customItem, Player player, Pickup pickup) => Dropped?.Invoke(customItem, player, pickup); public static void OnDropping(CustomItemBase customItem, Player player, Item item, TypeWrapper isThrow, TypeWrapper isAllowed) => Dropping?.Invoke(customItem, player, item, isThrow, isAllowed); - public static void OnSearched(CustomItemBase customItem, Player player, Pickup pickup) + public static void OnSearched(CustomItemBase customItem, Player player, Pickup pickup) => Searched?.Invoke(customItem, player, pickup); - public static void OnSearching(CustomItemBase customItem, Player player, Pickup pickup, TypeWrapper isAllowed) + public static void OnSearching(CustomItemBase customItem, Player player, Pickup pickup, TypeWrapper isAllowed) => Searching?.Invoke(customItem, player, pickup, isAllowed); - public static void OnPicked(CustomItemBase customItem, Player player, Item item) + public static void OnPicked(CustomItemBase customItem, Player player, Item item) => Picked?.Invoke(customItem, player, item); - public static void OnPicking(CustomItemBase customItem, Player player, Pickup pickup, TypeWrapper isAllowed) + public static void OnPicking(CustomItemBase customItem, Player player, Pickup pickup, TypeWrapper isAllowed) => Picking?.Invoke(customItem, player, pickup, isAllowed); - public static void OnThrew(CustomItemBase customItem, Player player, Pickup pickup, Rigidbody rigidbody) + public static void OnThrew(CustomItemBase customItem, Player player, Pickup pickup, Rigidbody rigidbody) => Threw?.Invoke(customItem, player, pickup, rigidbody); - public static void OnThrowing(CustomItemBase customItem, Player player, Pickup pickup, Rigidbody rigidbody, TypeWrapper isAllowed) + public static void OnThrowing(CustomItemBase customItem, Player player, Pickup pickup, Rigidbody rigidbody, TypeWrapper isAllowed) => Throwing?.Invoke(customItem, player, pickup, rigidbody, isAllowed); - public static void OnProcessingItem(CustomItemBase customItem, Player player, Item item, TypeWrapper knobSetting, TypeWrapper isAllowed) + public static void OnProcessingItem(CustomItemBase customItem, Player player, Item item, TypeWrapper knobSetting, TypeWrapper isAllowed) => ProcessingItem?.Invoke(customItem, player, item, knobSetting, isAllowed); - public static void OnProcessingPickup(CustomItemBase customItem, Pickup pickup, TypeWrapper knobSetting, TypeWrapper newPosition, TypeWrapper isAllowed) - => ProcessingPickup?.Invoke(customItem, pickup, knobSetting, newPosition, isAllowed); - public static void OnRemoved(CustomItemBase customItem, Player player, ItemBase? itemBase, ItemPickupBase? itemPickupBase) + public static void OnProcessingPickup(CustomItemBase customItem, Pickup pickup, TypeWrapper knobSetting, TypeWrapper newPosition, TypeWrapper isAllowed) + => ProcessingPickup?.Invoke(customItem, pickup, knobSetting, newPosition, isAllowed); + public static void OnRemoved(CustomItemBase customItem, Player player, ItemBase? itemBase, ItemPickupBase? itemPickupBase) => Removed?.Invoke(customItem, player, itemBase, itemPickupBase); + public static void OnTakingDamage(CustomItemBase customItem, Player player, Player attacker, DamageHandlerBase damageHandler) + => TakingDamage?.Invoke(customItem, player, attacker, damageHandler); } diff --git a/CustomItemsAPI/Items/CustomArmorBase.cs b/CustomItemsAPI/Items/CustomArmorBase.cs index ba23b7e..6642b17 100644 --- a/CustomItemsAPI/Items/CustomArmorBase.cs +++ b/CustomItemsAPI/Items/CustomArmorBase.cs @@ -1,7 +1,11 @@ -using CustomItemsAPI.Extensions; +using CustomItemsAPI.EventHandlers; +using CustomItemsAPI.Extensions; using InventorySystem.Items.Armor; +using LabApi.Events.Arguments.PlayerEvents; using LabApi.Features.Wrappers; +using PlayerStatsSystem; using System.ComponentModel; +using UnityEngine; namespace CustomItemsAPI.Items; @@ -68,4 +72,15 @@ public override void Parse(Item item) if (CategoryLimits != null) body.Base.CategoryLimits = [.. CategoryLimits]; } + + /// + /// Triggers when user is damaged. + /// + /// Reciever of the damage. + /// Damage dealer. + /// Damage Handler. + public virtual void OnTakingDamage(Player reciever, Player attacker, FirearmDamageHandler damageHandler) + { + CL.Debug($"OnTakingDamage {reciever.DisplayName} from {attacker.DisplayName}", Main.Instance.Config.Debug); + } } From ebe7a8513c654c51f34999bb02f87f0e424b33ad Mon Sep 17 00:00:00 2001 From: Kadava Date: Sat, 14 Mar 2026 02:46:12 +0000 Subject: [PATCH 2/4] Added hint to picking up armour --- CustomItemsAPI/Items/CustomArmorBase.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CustomItemsAPI/Items/CustomArmorBase.cs b/CustomItemsAPI/Items/CustomArmorBase.cs index 6642b17..49f4868 100644 --- a/CustomItemsAPI/Items/CustomArmorBase.cs +++ b/CustomItemsAPI/Items/CustomArmorBase.cs @@ -83,4 +83,16 @@ public virtual void OnTakingDamage(Player reciever, Player attacker, FirearmDama { CL.Debug($"OnTakingDamage {reciever.DisplayName} from {attacker.DisplayName}", Main.Instance.Config.Debug); } + + /// + /// This who picked up the current Custom Item (Armour). + /// + /// The Player who called this function. + /// The armour has been equiped. + public override void OnSearched(Player player, Pickup pickup) + { + CL.Debug($"OnSearched (Armour) {player.PlayerId} {pickup.Serial}", Main.Instance.Config.Debug); + if (OverrideShowPickedUpHint) + HintShow?.Invoke(player, string.Format(OverridePickedUpHint, DisplayName, Description)); + } } From c67ff62278fe0c0511fa103122962c7eee2d143e Mon Sep 17 00:00:00 2001 From: Kadava Date: Sat, 14 Mar 2026 14:40:06 +0000 Subject: [PATCH 3/4] removed debug text --- CustomItemsAPI/EventHandlers/DamageHandler.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/CustomItemsAPI/EventHandlers/DamageHandler.cs b/CustomItemsAPI/EventHandlers/DamageHandler.cs index 6e64fc9..ae5c37f 100644 --- a/CustomItemsAPI/EventHandlers/DamageHandler.cs +++ b/CustomItemsAPI/EventHandlers/DamageHandler.cs @@ -37,10 +37,8 @@ public override void OnPlayerHurting(PlayerHurtingEventArgs ev) if (!ev.Player.Inventory.TryGetBodyArmor(out _)) return; - CL.Debug($"OnPlayerHurting {ev.Player.DisplayName} ARMOUR"); if (CustomItems.TryGetCustomItem(item: ev.Player.Items.Where(x => x.Type.IsArmor()).FirstOrDefault(), out CustomArmorBase cur_armor)) { - CL.Debug($"OnPlayerHurting {ev.Player.DisplayName} CUSTOM ITEM {cur_armor}"); CustomItemEvents.OnTakingDamage(cur_armor, ev.Player, ev.Attacker, ev.DamageHandler); cur_armor.OnTakingDamage(ev.Player, ev.Attacker, firearmDamageHandler); return; From 2f9188dc7af94fbb3109ea0f9c2482b50ddb10cc Mon Sep 17 00:00:00 2001 From: Kadava Date: Wed, 15 Apr 2026 00:30:51 +0100 Subject: [PATCH 4/4] Fixed all requests Added IsAllowed and un-commonwealth-ised "Armor" :vomit: --- CustomItemsAPI/EventHandlers/DamageHandler.cs | 13 +++++++------ CustomItemsAPI/Events/CustomItemEvents.cs | 6 +++--- CustomItemsAPI/Items/CustomArmorBase.cs | 7 ++++--- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/CustomItemsAPI/EventHandlers/DamageHandler.cs b/CustomItemsAPI/EventHandlers/DamageHandler.cs index ae5c37f..2d9d04c 100644 --- a/CustomItemsAPI/EventHandlers/DamageHandler.cs +++ b/CustomItemsAPI/EventHandlers/DamageHandler.cs @@ -4,6 +4,7 @@ using InventorySystem.Items.Armor; using LabApi.Events.Arguments.PlayerEvents; using LabApi.Events.CustomHandlers; +using LabApi.Features.Wrappers; using PlayerStatsSystem; namespace CustomItemsAPI.EventHandlers; @@ -31,17 +32,17 @@ public override void OnPlayerHurting(PlayerHurtingEventArgs ev) CustomFirearmEvents.OnHurting(cur_item, ev.Player, ev.Attacker, firearmDamageHandler, isAllowedHelper); cur_item.OnHurting(ev.Player, ev.Attacker, firearmDamageHandler, isAllowedHelper); ev.IsAllowed = isAllowedHelper.Value; - return; } - if (!ev.Player.Inventory.TryGetBodyArmor(out _)) + if (!ev.Player.Inventory.TryGetBodyArmor(out BodyArmor equipedArmor)) return; - if (CustomItems.TryGetCustomItem(item: ev.Player.Items.Where(x => x.Type.IsArmor()).FirstOrDefault(), out CustomArmorBase cur_armor)) + if (CustomItems.TryGetCustomItem(item: Item.Get(equipedArmor), out CustomArmorBase cur_armor)) { - CustomItemEvents.OnTakingDamage(cur_armor, ev.Player, ev.Attacker, ev.DamageHandler); - cur_armor.OnTakingDamage(ev.Player, ev.Attacker, firearmDamageHandler); - return; + TypeWrapper isAllowedHelper = new(ev.IsAllowed); + CustomItemEvents.OnTakingDamage(cur_armor, ev.Player, ev.Attacker, ev.DamageHandler, isAllowedHelper); + cur_armor.OnTakingDamage(ev.Player, ev.Attacker, firearmDamageHandler, isAllowedHelper); + ev.IsAllowed = isAllowedHelper.Value; } } diff --git a/CustomItemsAPI/Events/CustomItemEvents.cs b/CustomItemsAPI/Events/CustomItemEvents.cs index 9e21a88..96cdae1 100644 --- a/CustomItemsAPI/Events/CustomItemEvents.cs +++ b/CustomItemsAPI/Events/CustomItemEvents.cs @@ -32,7 +32,7 @@ public static class CustomItemEvents public static event Action, TypeWrapper>? ProcessingItem; public static event Action, TypeWrapper, TypeWrapper>? ProcessingPickup; public static event Action? Removed; - public static event Action? TakingDamage; + public static event Action>? TakingDamage; public static void OnRegistered(CustomItemBase customItem) => Registered?.Invoke(customItem); @@ -72,6 +72,6 @@ public static void OnProcessingPickup(CustomItemBase customItem, Pickup pickup, => ProcessingPickup?.Invoke(customItem, pickup, knobSetting, newPosition, isAllowed); public static void OnRemoved(CustomItemBase customItem, Player player, ItemBase? itemBase, ItemPickupBase? itemPickupBase) => Removed?.Invoke(customItem, player, itemBase, itemPickupBase); - public static void OnTakingDamage(CustomItemBase customItem, Player player, Player attacker, DamageHandlerBase damageHandler) - => TakingDamage?.Invoke(customItem, player, attacker, damageHandler); + public static void OnTakingDamage(CustomItemBase customItem, Player player, Player attacker, DamageHandlerBase damageHandler, TypeWrapper isAllowed) + => TakingDamage?.Invoke(customItem, player, attacker, damageHandler, isAllowed); } diff --git a/CustomItemsAPI/Items/CustomArmorBase.cs b/CustomItemsAPI/Items/CustomArmorBase.cs index 49f4868..eebc4e3 100644 --- a/CustomItemsAPI/Items/CustomArmorBase.cs +++ b/CustomItemsAPI/Items/CustomArmorBase.cs @@ -79,9 +79,10 @@ public override void Parse(Item item) /// Reciever of the damage. /// Damage dealer. /// Damage Handler. - public virtual void OnTakingDamage(Player reciever, Player attacker, FirearmDamageHandler damageHandler) + /// /// Whether or not the action is allowed to perform. + public virtual void OnTakingDamage(Player reciever, Player attacker, FirearmDamageHandler damageHandler, TypeWrapper isAllowed) { - CL.Debug($"OnTakingDamage {reciever.DisplayName} from {attacker.DisplayName}", Main.Instance.Config.Debug); + CL.Debug($"OnTakingDamage {reciever.DisplayName} from {attacker.DisplayName} dealing {damageHandler.Damage} damage", Main.Instance.Config.Debug); } /// @@ -91,7 +92,7 @@ public virtual void OnTakingDamage(Player reciever, Player attacker, FirearmDama /// The armour has been equiped. public override void OnSearched(Player player, Pickup pickup) { - CL.Debug($"OnSearched (Armour) {player.PlayerId} {pickup.Serial}", Main.Instance.Config.Debug); + CL.Debug($"OnSearched (Armor) {player.PlayerId} {pickup.Serial}", Main.Instance.Config.Debug); if (OverrideShowPickedUpHint) HintShow?.Invoke(player, string.Format(OverridePickedUpHint, DisplayName, Description)); }