import: org.bukkit.event.player.PlayerInteractEvent org.bukkit.event.player.PlayerInteractEntityEvent org.bukkit.event.block.BlockBreakEvent org.bukkit.event.block.BlockPlaceEvent org.bukkit.event.entity.EntityInteractEvent on script load: if directory "plugins/LockIT" doesn't exist: skutil create directory "plugins/LockIT" send "[LockIT] &fCreating folder..." to the console if file "plugins/LockIT/config.yml" doesn't exist: skutil download file from "https://bit.ly/2z30IEL" to file "plugins/LockIT/config.yml" send "[LockIT] &fGenerating config.yml..." to the console if file "plugins/LockIT/permissions.yml" doesn't exist: skutil download file from "https://bit.ly/2TJ0USQ" to file "plugins/LockIT/permissions.yml" send "[LockIT] &fGenerating permissions.yml..." to the console if file "plugins/LockIT/messages.yml" doesn't exist: skutil download file from "https://bit.ly/2NkRvjc" to file "plugins/LockIT/messages.yml" send "[LockIT] &fGenerating messages.yml..." to the console send "[LockIT] &2DONE!!" to the console send "" to the console send "[LockIT] &fGrabbing settings from the config..." to the console delete {lockIT::*} set {lockIT::prefix} to skutil yaml value "prefix" from file "plugins/LockIT/config.yml" set {lockIT::fastLock} to skutil yaml value "fastLock" from file "plugins/LockIT/config.yml" set {lockIT::version} to skutil yaml value "version" from file "plugins/LockIT/config.yml" set {lockit::protectedItems::*} to skutil yaml list "protectedItems" from file "plugins/LockIT/config.yml" send "[LockIT] &fGrabbing all messages..." to the console set {lockIT::msgAlreadyLocked} to skutil yaml value "msgAlreadyLocked" from file "plugins/LockIT/messages.yml" set {lockIT::msgLocked} to skutil yaml value "msgLocked" from file "plugins/LockIT/messages.yml" set {lockIT::msgOtherDenied} to skutil yaml value "msgOtherDenied" from file "plugins/LockIT/messages.yml" set {lockIT::msgUpdateSign} to skutil yaml value "msgUpdateSign" from file "plugins/LockIT/messages.yml" set {lockIT::msgNoUpdateSign} to skutil yaml value "msgNoUpdateSign" from file "plugins/LockIT/messages.yml" set {lockIT::msgSignDenied} to skutil yaml value "msgSignDenied" from file "plugins/LockIT/messages.yml" set {lockIT::msgFixed} to skutil yaml value "msgFixed" from file "plugins/LockIT/messages.yml" set {lockIT::msgSignUpdated} to skutil yaml value "msgSignUpdated" from file "plugins/LockIT/messages.yml" send "[LockIT] &fGrabbing all permissions..." to the console set {lockIT::useLockIT} to skutil yaml value "useLockIT" from file "plugins/LockIT/permissions.yml" set {lockIT::bypassLocked} to skutil yaml value "bypassLocked" from file "plugins/LockIT/permissions.yml" set {lockIT::adminLockIT} to skutil yaml value "adminLockIT" from file "plugins/LockIT/permissions.yml" send "[LockIT] &2DONE! ENJOY!" to the console send "[LockIT] You are running Version: &d%{lockIT::version}%" to the console set {_verCheck} to skutil line 1 from url "https://bit.ly/2ujmO3y" if {_verCheck} is not {lockIT::version}: send "[LockIT] The most recent Version: &d%{_verCheck}%" to the console # --------------------------------------------------------------------------------------------------------------- # Commands # --------------------------------------------------------------------------------------------------------------- command /lockit [] []: trigger: if arg 1 is not set: if arg 2 is "help": message "&4&m---------------------------------------------------" message "%{lockIT::prefix}% &eby DroidVengeance" message "&4&m---------------------------------------------------" message " - &eTo edit a sign, rightclick and use:" message " - &e/lockit " if player has permission "lockit.admin": message " - &eTo turn on fastlock (shift+rightclick)" message " - &3/lockit true / false" message " - &eTo fix a door use:" message " - &e/lockit fix" if arg 2 is "fix": loop blocks in radius 2 of target block: loop-block = wall sign line 1 of loop-block is "[LockIT]" line 2 of loop-block = "%player%" or uuid of player toggle target block send "%colored {lockIT::prefix}% %colored {lockIT::msgFixed}%" if arg 2 is "fastlock": if {lockIT::%player%::fastLock} is not set: set {lockIT::%player%::fastLock} to false send "%colored {lockIT::prefix}% &9Fastlock &6is turned &cOFF" stop if {lockIT::%player%::fastLock} is true: set {lockIT::%player%::fastLock} to false send "%colored {lockIT::prefix}% &9Fastlock &6is turned &cOFF" stop if {lockIT::%player%::fastLock} is false: set {lockIT::%player%::fastLock} to true send "%colored {lockIT::prefix}% &9Fastlock &6is turned &aON" stop if arg 1 is set: if arg 2 is not set: set line arg 1 of {lockit::%player%::signEdit} to " " send "%colored {lockIT::prefix}% %colored {lockIT::msgSignUpdated}%" delete {lockit::%player%::signEdit} stop set line arg 1 of {lockit::%player%::signEdit} to arg 2 send "%colored {lockIT::prefix}% %colored {lockIT::msgSignUpdated}%" delete {lockit::%player%::signEdit} command /lockitdebug: trigger: # Code here loop {lockit::protectedItems::*}: send "%loop-value%" set {_item} to loop-value parsed as an item give {_item} to the player # --------------------------------------------------------------------------------------------------------------- # Fastlock # --------------------------------------------------------------------------------------------------------------- on BlockPlaceEvent: if event.getBlockPlaced() = any wall sign: {lockIT::fastLock} = true if {lockIT::%event.getPlayer()%::fastLock} is not set: loop blocks in radius 1 of event.getBlockPlaced(): loop {lockit::protectedItems::*}: set {_item} to loop-value-2 parsed as an item if loop-block = {_item}: if event.getPlayer() has permission "%{lockIT::useLockIT}%" or "%{lockIT::bypassLocked}%": close event.getPlayer()'s inventory wait 3 ticks set line 1 of event.getBlockPlaced() to "[LockIT]" set line 2 of event.getBlockPlaced() to "%event.getPlayer()%" event.getPlayer().sendMessage("%colored {lockIT::prefix}% &6This item is now protected!") stop if {lockIT::%event.getPlayer()%::fastLock} is true: loop blocks in radius 1 of event.getBlockPlaced(): loop {lockit::protectedItems::*}: set {_item} to loop-value-2 parsed as an item if loop-block = {_item}: if event.getPlayer() has permission "%{lockIT::useLockIT}%" or "%{lockIT::bypassLocked}%": close event.getPlayer()'s inventory wait 3 ticks set line 1 of event.getBlockPlaced() to "[LockIT]" set line 2 of event.getBlockPlaced() to "%event.getPlayer()%" event.getPlayer().sendMessage("%colored {lockIT::prefix}% &6This item is now protected!") stop else: wait 1 ticks stop on sign edit: if line 1 of block is "[LockIT]": if player has permission "%{lockIT::useLockIT}%": if line 2 of block contains "%player%" or uuid of event.getPlayer(): send "%colored {lockIT::prefix}% &6This item is now protected!" else: set block to air send "%colored {lockIT::prefix}% &cYou don't have permission to do that!" # -------------------------------------------------------------------------------------------------------- # Interacting with protected blocks # --------------------------------------------------------------------------------------------------------------- on PlayerInteractEvent: loop {lockit::protectedItems::*}: set {_item} to loop-value parsed as an item if event.getClickedBlock() = {_item}: loop blocks in radius 1 of event.getClickedBlock(): if loop-block = wall sign: if line 1 of loop-block = "[LockIT]": if line 2 of loop-block does not contain "%event.getPlayer()%" or uuid of event.getPlayer(): cancel event if event.getPlayer() has permission "%{lockIT::bypassLocked}%" or "lockit.admin.*": uncancel event stop if line 3 of loop-block contains "%event.getPlayer()%" or uuid of event.getPlayer() or "everyone": uncancel event stop event.getPlayer().sendMessage("%colored {lockIT::prefix}% %colored {lockIT::msgOtherDenied}%") stop else: uncancel event if loop-block = chest: loop blocks in radius 1 of loop-block-1: if loop-block-2 = wall sign: if line 1 of loop-block-2 = "[LockIT]": if line 2 of loop-block-2 does not contain "%event.getPlayer()%" or uuid of event.getPlayer(): cancel event if event.getPlayer() has permission "%{lockIT::bypassLocked}%" or "lockit.admin.*": uncancel event stop if line 3 of loop-block-2 contains "%event.getPlayer()%" or uuid of event.getPlayer() or "everyone": uncancel event stop event.getPlayer().sendMessage("%colored {lockIT::prefix}% %colored {lockIT::msgOtherDenied}%") stop else: uncancel event if event.getClickedBlock() = oak door or dark oak door or spruce door or jungle door or acacia door or birch door: loop blocks in radius 2 of event.getClickedBlock(): if loop-block = wall sign: if line 1 of loop-block = "[LockIT]": if line 2 of loop-block does not contain "%event.getPlayer()%" or uuid of event.getPlayer(): cancel event if event.getPlayer() has permission "%{lockIT::bypassLocked}%" or "lockit.admin.*": uncancel event if line 4 of loop-block = "[timer:1]": wait 1 second close event.getClickedBlock() if line 4 of loop-block = "[timer:2]": wait 2 second close event.getClickedBlock() if line 4 of loop-block = "[timer:3]": wait 3 second close event.getClickedBlock() if line 4 of loop-block = "[timer:4]": wait 4 second close event.getClickedBlock() if line 4 of loop-block = "[timer:5]": wait 5 second close event.getClickedBlock() stop if line 3 of loop-block contains "%event.getPlayer()%" or uuid of event.getPlayer() or "everyone": uncancel event stop event.getPlayer().sendMessage("%colored {lockIT::prefix}% %colored {lockIT::msgOtherDenied}%") stop else: uncancel event if line 4 of loop-block = "[timer:1]": wait 1 second close event.getClickedBlock() if line 4 of loop-block = "[timer:2]": wait 2 second close event.getClickedBlock() if line 4 of loop-block = "[timer:3]": wait 3 second close event.getClickedBlock() if line 4 of loop-block = "[timer:4]": wait 4 second close event.getClickedBlock() if line 4 of loop-block = "[timer:5]": wait 5 second close event.getClickedBlock() else if event.getClickedBlock() = wall sign: if line 1 of event.getClickedBlock() = "[LockIT]": "%event.getAction()%" contains "RIGHT_CLICK" if line 2 of event.getClickedBlock() does not contain "%event.getPlayer()%" or uuid of event.getPlayer(): cancel event if event.getPlayer() has permission "%{lockIT::bypassLocked}%" or "%{lockIT::adminLockIT}%" or "lockit.admin.*": uncancel event event.getPlayer().sendMessage("%colored {lockIT::prefix}% %colored {lockIT::msgUpdateSign}%") set {lockit::%event.getPlayer()%::signEdit} to event.getClickedBlock() stop event.getPlayer().sendMessage("%colored {lockIT::prefix}% %colored {lockIT::msgNoUpdateSign}%") stop else: uncancel event event.getPlayer().sendMessage("%colored {lockIT::prefix}% %colored {lockIT::msgUpdateSign}%") set {lockit::%event.getPlayer()%::signEdit} to event.getClickedBlock() stop # --------------------------------------------------------------------------------------------------------------- # Break Protection # --------------------------------------------------------------------------------------------------------------- on BlockBreakEvent: loop {lockit::protectedItems::*}: set {_item} to loop-value parsed as an item if event.getBlock() = {_item}: loop blocks in radius 1 of event.getBlock(): if loop-block = wall sign: if line 1 of loop-block = "[LockIT]": if line 2 of loop-block != "%event.getPlayer()%" or uuid of event.getPlayer(): cancel event event.getPlayer().sendMessage("%colored {lockIT::prefix}% %colored {lockIT::msgOtherDenied}%") else: uncancel event else if event.getBlock() = wall sign: if line 1 of event.getBlock() = "[LockIT]": if line 2 of event.getBlock() != "%event.getPlayer()%" or uuid of event.getPlayer(): cancel event if event.getPlayer() has permission "%{lockIT::bypassLocked}%" or "lockit.admin.*": uncancel event stop event.getPlayer().sendMessage("%colored {lockIT::prefix}% %colored {lockIT::msgSignDenied}%") stop else: uncancel event stop # --------------------------------------------------------------------------------------------------------------- # Hopper Protection # --------------------------------------------------------------------------------------------------------------- on place of hopper or normal rail or powered rail or detector rail or activator rail: if block west of block above event-block is a wall sign: line 1 of block west of block above event-block is "[LockIT]" cancel event send "&cYou can't place that below a protected chest." if block west of block north of block above event-block is a wall sign: line 1 of block west of block north of block above event-block is "[LockIT]" cancel event send "&cYou can't place that below a protected chest." if block east of block above event-block is a wall sign: line 1 of block east of block above event-block is "[LockIT]" cancel event send "&cYou can't place that below a protected chest." if block east of block south of block above event-block is a wall sign: line 1 of block east of block south of block above event-block is "[LockIT]" cancel event send "&cYou can't place that below a protected chest." if block south of block above event-block is a wall sign: line 1 of block south of block above event-block is "[LockIT]" cancel event send "&cYou can't place that below a protected chest." if block south of block west of block above event-block is a wall sign: line 1 of block south of block west of block above event-block is "[LockIT]" cancel event send "&cYou can't place that below a protected chest." if block north of block above event-block is a wall sign: line 1 of block north of block above event-block is "[LockIT]" cancel event send "&cYou can't place that below a protected chest." if block north of block north of block above event-block is a wall sign: line 1 of block north of block north of block above event-block is "[LockIT]" cancel event send "&cYou can't place that below a protected chest."