silkspawner.sk

Created by Unknown

Just so you know, we don't know the file format for every file. If it's just a bunch of random characters, it's probably a .zip or .jar.

#======= 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: <none>
	# !!! 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 <none>
	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 [<text>] [<text>]:
	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 <maintanance/m> &cppl cant use spawner while maintanance"
			message "&b/ss <give> <spawner type> &cgive spawner"
			message "&6&m---------------------------------------------------"