#======= sample ================ # for using essentialsX must add permission "essentials.spawnerconvert.*" for member, else all ppl place spawner become pig # entity ids #http://minecraft.gamepedia.com/Data_values/Entity_IDs #iron golem spawner on hand #{BlockEntityTag:{MaxNearbyEntities:6s,RequiredPlayerRange:16s,SpawnCount:4s,SpawnData:{id:"minecraft:villager_golem"},MaxSpawnDelay:800s,Delay:20s,x:0,y:0,z:0,id:"minecraft:mob_spawner",SpawnRange:4s,MinSpawnDelay:200s,SpawnPotentials:[0:{Entity:{id:"minecraft:villager_golem"},Weight:1}]},display:{Name:"§rIron Golem Spawner"}} #pola bear spawner on break #{MaxNearbyEntities:6s,RequiredPlayerRange:16s,SpawnCount:4s,SpawnData:{id:"minecraft:polar_bear"},MaxSpawnDelay:800s,Delay:468s,x:-3673,y:63,z:2575,id:"minecraft:mob_spawner",SpawnRange:4s,MinSpawnDelay:200s,SpawnPotentials:[0:{Entity:{id:"minecraft:polar_bear"},Weight:1}]} # test {BlockEntityTag:{SpawnData:{id:""minecraft:villager_golem""},id:""minecraft:mob_spawner"",SpawnPotentials:[0:{Entity:{id:""minecraft:villager_golem""},Weight:1}]},display:{Name:""§rIron Golem Spawner""}} #===========# # options # #===========# options: prefix: &6[&eSilkSpawner&6]&b breaking_fees: 10000 # breaking fees ; put 0 for disable placing_fees: 1000 # placing fees ; put 0 for disable logger: true # log break & place spawner activity in "Skript/logs/spawner-year-month.log" #permission for staff maintanance: "silkspawner.maintanance" # trigger maintnance, used of incase of bug ; once triggered player cannot break & place spawner maintanance_use: "silkspawner.maintnance.use" # can use spawner while maintanance give: "silkspawner.give" # access give spawner command #===================# # on load default # #===================# on script load: set {silkspawner.maintanance} to false #====================# # Silkspawner: Break # #====================# on break of mob spawner: #---------------- maintanance ------------------------------ if {silkspawner.maintanance} = true: if player does not have permission {@maintanance_use}: message "{@prefix} silkspawner under maintanance" to player cancel event stop #----------------------------------------------------------- player's gamemode is not creative #----------- get spawner info -------------- set {_s} to "%nbt of targeted block%" set {_s::*} to {_s} split at """" # get like minecraft:polar_bear set {_entity} to {_s::2} set {_entity_name} to {_s::2} replace "minecraft:" in {_entity_name} with "" replace "_" in {_entity_name} with " " # get like polar_bear ; this also can used as spawner id #------------------------------------------- #----------- !!! prevent known bug !!! -------------- (sktuff) # !!! if no block will get spawner named below & error !!! # !!! get spawner nbt facing side got placed torch & redstone torch --> will result: # !!! get spawner nbt facing side got placed sign --> will result: {x:2193,Text4:"{\"text\":\"\"}",y:41,Text3:"{\"text\":\"\"}",z:-4616,Text2:"{\"text\":\"\"}",id:"minecraft:sign",Text1:"{\"text\":\"\"}"} #sample get nbt from target spawner: {MaxNearbyEntities:6s,RequiredPlayerRange:16s,SpawnCount:4s,SpawnData:{id:"minecraft:cave_spider"},MaxSpawnDelay:800s,Delay:284s,x:2192,y:41,z:-4616,id:"minecraft:mob_spawner",SpawnRange:4s,MinSpawnDelay:200s,SpawnPotentials:[0:{Entity:{id:"minecraft:cave_spider"},Weight:1}]} if {_s} does not contain "{MaxNearbyEntities:6s,RequiredPlayerRange:16s,SpawnCount:4s,SpawnData:{id:": set {_month} to month #log "%player%, bugged %{_entity_name}% spawner, %world%, %location of block%, ping %player's ping%" to "Spawner-%year%-%{_month}%.log" message "{@prefix} pls remove anything stick to the spawner before break it" cancel event stop #------------------------------------------- if player's tool is any pickaxe of silk touch: #-------------------------------------------------------------------- # fees if {@breaking_fees} is not equal to 0: if player's balance >= {@breaking_fees}: remove {@breaking_fees} from player's balance else: message "{@prefix} sorry son, you dont have ${@breaking_fees} to do that" cancel event stop #-------------------------------------------------------------------- drop mob spawner with nbt "{BlockEntityTag:{SpawnData:{id:""%{_entity}%""},id:""minecraft:mob_spawner"",SpawnPotentials:[0:{Entity:{id:""%{_entity}%""},Weight:1}]},display:{Name:""&e%{_entity_name}% spawner""}}" with lore "%{_entity_name}% spawner" #lore can always defind the spawner type even player change name scam broadcast "{@prefix} %player% breaked &c%{_entity_name}% &bspawner with ${@breaking_fees}" #---- logger ------------------- if {@logger} = true: set {_month} to month log "%player%, break %{_entity_name}% spawner, %world%, %location of block%, ping %player's ping%" to "Spawner-%year%-%{_month}%.log" else: broadcast "{@prefix} %player% destroyed &c%{_entity_name}% &bspawner without silk touch" #---- logger ------------------- if {@logger} = true: set {_month} to month log "%player%, destroyed %{_entity_name}% spawner, %world%, %location of block%, ping %player's ping%" to "Spawner-%year%-%{_month}%.log" #====================# # Silkspawner: Place # #====================# on place of mob spawner: #---------------- maintanance ----------------------------- if {silkspawner.maintanance} = true: if player does not have permission {@maintanance_use}: message "{@prefix} silkspawner under maintanance" to player cancel event stop #---------------------------------------------------------- player's gamemode is not creative #----------- get hand spawner info -------------- set {_s} to "%nbt of player's tool%" # !!!!! suspect high ping player not enough time to get nbt from player's tool ---> result will set {_s::*} to {_s} split at """" # get like minecraft:polar_bear set {_entity} to {_s::2} set {_entity_name} to {_s::2} replace "minecraft:" in {_entity_name} with "" replace "_" in {_entity_name} with " " #--------- fix old spawner (repair name) --------------------- (test old spawner crated by old silkspawner plugin, cant use without the plugin, so sucks) # sample of SilkSpawners plugin generated nbt: {BlockEntityTag:{SpawnData:{id:"blaze"},SpawnPotentials:{}},display:{Name:"§eBlaze §fSpawner"},SpawnData:{id:"blaze"},SilkSpawners:{entityID:61s}} if {_s} contains "rideablespider" or "pumpling" or "cave spider" or "},SilkSpawners:{entityID:": # condition same as below + detect silkspawner plugin nbt if {_entity_name} = "rideablespider": set {_entity_name} to "spider" if {_entity_name} = "pumpling": set {_entity_name} to "zombie" if {_entity_name} = "cave spider": set {_entity_name} to "cave_spider" # if {_entity_name} = "pig": # set {_entity_name} to "zombie" # broadcast "{@spawner} pig --> zombie" set {_repair} to mob spawner with nbt "{BlockEntityTag:{SpawnData:{id:""minecraft:%{_entity_name}%""},id:""minecraft:mob_spawner"",SpawnPotentials:[0:{Entity:{id:""minecraft:%{_entity_name}%""},Weight:1}]},display:{Name:""&e%{_entity_name}% spawner""}}" with lore "%{_entity_name}% spawner" remove 1 of player's tool from player's inventory give player {_repair} message "{@prefix} auto repaired old spawner &c%{_entity_name}%" set {_month} to month log "%player%, repaired %{_entity_name}% spawner, %world%, %location of block%, ping %player's ping%" to "Spawner-%year%-%{_month}%.log" cancel event stop # prevent code go down #-------------------------------------------------------------------- # fees if {@placing_fees} is not equal to 0: if player's balance >= {@placing_fees}: remove {@placing_fees} from player's balance else: message "{@prefix} sorry son, you dont have ${@placing_fees} to do that" cancel event stop #-------------------------------------------------------------------- broadcast "{@prefix} %player% placed &c%{_entity_name}% &bspawner with ${@placing_fees}" #---- logger ------------------- if {@logger} = true: set {_month} to month log "%player%, placed %{_entity_name}% spawner, %world%, %location of block%, ping %player's ping%" to "Spawner-%year%-%{_month}%.log" #=======================# # Silkspawner: Commands # #=======================# command /silkspawner [] []: aliases: ss trigger: if arg 1 = "maintanance" or "m": # command maintnance #----------------------------------------------------------- if player does not have permission {@maintanance}: message "{@prefix} you dont have permission to do that" stop #----------------------------------------------------------- if {silkspawner.maintanance} = false: set {silkspawner.maintanance} to true broadcast "{@prefix} maintanance &a&lEnabled &bby %player%" else: set {silkspawner.maintanance} to false message "{@prefix} maintanance &c&lDisabled &bby %player%" else if arg 1 = "give": # command give spawner #----------------------------------------------------------- if player does not have permission {@give}: message "{@prefix} you dont have permission to do that" stop #----------------------------------------------------------- if arg 2 is not set: message "{@prefix} pls put a spawner name" stop #--------------------------------------------- set {_a} to mob spawner with nbt "{BlockEntityTag:{SpawnData:{id:""minecraft:%arg 2%""},id:""minecraft:mob_spawner"",SpawnPotentials:[0:{Entity:{id:""minecraft:%arg 2%""},Weight:1}]},display:{Name:""&e%arg 2% spawner""}}" with lore "%arg 2% spawner" #lore can always defind the spawner type even player change name scam give player {_a} message "{@prefix} you get &c%arg 2% &bspawner" else: message "&6&m--------------------&6[&aSilkspawner&6]&m--------------------" message "&b/ss &cppl cant use spawner while maintanance" message "&b/ss &cgive spawner" message "&6&m---------------------------------------------------"