# -------------------------------------------------- # SkArmorEvent v. 1.2.1 (1.9.4 - 1.13.1) # Skrypt na eventy wywołujące się przy zakładaniu i zdejmowaniu zbroi # # by Kormic # -------------------------------------------------- import: org.bukkit.Material custom event "onArmorEquip": pattern: sk(ae|ArmorEvent) armo[u]r (equip|wear) event-values: player, item custom event "onArmorUnequip": pattern: sk(ae|ArmorEvent) armo[u]r un(equip|wear) event-values: player, item function skArmorEventCheckArmor(p: player, i: item) :: boolean: return false if {_i} is not any armor if {_i} is any helmet: return false if {_p}'s helmet is not air else if {_i} is any chestplate: return false if {_p}'s chestplate is not air else if {_i} is any leggings: return false if {_p}'s leggings is not air else if {_i} is any boots: return false if {_p}'s boots is not air return true function skArmorEventHotbarButtonCheckArmor(p: player, i: item type, s: slot, n: number) :: boolean: slot {_n} of {_p}'s inventory is {_i} return true if skArmorEventIsCancelled({_p}, "%slot {_n} of {_p}'s inventory%" parsed as item, "onArmorEquip") is true {_s} is not air set {_hb} to {_s} return true if skArmorEventIsCancelled({_p}, {_hb}, "onArmorUnequip") is true return false function skArmorEventIsCancelled(p: player, i: item, n: text) :: boolean: set {_e::player} to {_p} set {_e::item} to {_i} set {_event} to custom event "%{_n}%" with {_e::*} call event {_event} return true if {_event} is cancelled return false function skArmorEventChangeCoordinates(n: numbers, loc: location) :: locations: set {_loc::1} and {_loc::2} to {_loc} loop (3 and 6): add {_n::%loop-value - 2%} to x-loc of {_loc::%loop-value / 3%} add {_n::%loop-value - 1%} to y-loc of {_loc::%loop-value / 3%} add {_n::%loop-value%} to z-loc of {_loc::%loop-value / 3%} return {_loc::*} right click: player's tool's type is any armor set {_b::*} to "dispenser", "dropper", "chest", "furnace", "hopper", "crafting table", "workbench", "anvil", "bed", "door", "repeater", "comparator", "button", "lever", "wooden trapdoor", "fence gate", "daylight detector" and "sign" loop {_b::*}: stop if "%clicked block%" contains loop-value set {_i} to player's tool stop if skArmorEventCheckArmor(player, {_i}) is false cancel event if skArmorEventIsCancelled(player, {_i}, "onArmorEquip") is true inventory click: clicked inventory is player's inventory player's current inventory's type is crafting table inventory if click type is left mouse button or right mouse button: clicked slot is between 36 and 39 if player's cursor slot is any armor: set {_i} to player's cursor slot cancel event if skArmorEventIsCancelled(player, {_i}, "onArmorEquip") is true else if player's cursor slot is air: {_i} is not air cancel event if skArmorEventIsCancelled(player, "%event-slot%" parsed as item, "onArmorUnequip") is true else if click type is left mouse button with shift or right mouse button with shift: set {_i} to "%event-slot%" parsed as item if clicked slot is between 36 and 39: {_i} is not air cancel event if skArmorEventIsCancelled(player, {_i}, "onArmorUnequip") is true stop if skArmorEventCheckArmor(player, {_i}) is false cancel event if skArmorEventIsCancelled(player, {_i}, "onArmorEquip") is true else if click type is number key: clicked slot is between 36 and 39 set {_i} to "%event-slot%" parsed as item if {_i} is not air: slot (hotbar button) of player's inventory is air cancel event if skArmorEventIsCancelled(player, {_i}, "onArmorUnequip") is true stop if clicked slot is 39: cancel event if skArmorEventHotbarButtonCheckArmor(player, any helmet, player's helmet, hotbar button) is true else if clicked slot is 38: cancel event if skArmorEventHotbarButtonCheckArmor(player, any chestplate, player's chestplate, hotbar button) is true else if clicked slot is 37: cancel event if skArmorEventHotbarButtonCheckArmor(player, any leggings, player's leggings, hotbar button) is true else if clicked slot is 36: cancel event if skArmorEventHotbarButtonCheckArmor(player, any boots, player's boots, hotbar button) is true dispense: event-block.getType() != Material.DROPPER event-item's type is any armor size of (all players in radius 3 around event-block) >= 1 set {_loc::*} to skArmorEventChangeCoordinates((0.8, 0.5, 0.8, -0.8, 1.8, -0.8), location of event-block) if facing of event-block is above set {_loc::*} to skArmorEventChangeCoordinates((0.8, -0.5, 0.8, -0.8, -1.8, -0.8), location of event-block) if facing of event-block is below set {_loc::*} to skArmorEventChangeCoordinates((-0.8, -0.5, -0.5, 0.8, 0.49, -1.8), location of event-block) if facing of event-block is north set {_loc::*} to skArmorEventChangeCoordinates((-0.8, -0.5, 0.5, 0.8, 0.49, 1.8), location of event-block) if facing of event-block is south set {_loc::*} to skArmorEventChangeCoordinates((0.5, -0.5, -0.8, 1.8, 0.49, 0.8), location of event-block) if facing of event-block is east set {_loc::*} to skArmorEventChangeCoordinates((-0.5, -0.5, -0.8, -1.8, 0.49, 0.8), location of event-block) if facing of event-block is west loop all players in radius 3 around event-block: stop if skArmorEventCheckArmor(loop-player, event-item) is false continue if x-loc of location of loop-player is not between x-loc of {_loc::1} and x-loc of {_loc::2} continue if y-loc of location of loop-player is not between y-loc of {_loc::1} and y-loc of {_loc::2} continue if z-loc of location of loop-player is not between z-loc of {_loc::1} and z-loc of {_loc::2} cancel event if skArmorEventIsCancelled(loop-player, event-item, "onArmorEquip") is true stop