Denizen

Meta Documentation | Issue Tracker | New Script Repository | Old Script Repository | Tutorial Videos | Forums
Development builds of this project can be acquired at the provided continuous integration server. These builds have not been approved by the BukkitDev staff. Use them at your own risk.
Denizen uses a pasting service provided by its developers to enable recording of debug sessions. This allows an easy and universal way to troubleshoot a script. It is only used on '/denizen submit', however this service is not endorsed by the BukkitDev staff. Use it at your own risk.
HEY!
This project is moved!
Please download from:
https://www.spigotmc.org/resources/denizen.21039/
View resources at:
This Bukkit page won't be updated much!
About
Hey there! Thanks for using Denizen for Bukkit and Citizens2. Looking for a quick starting guide? Here's the place!
So, what is Denizen? It's is best classified as a scripting platform. Denizen for Bukkit and Citizens2 utilizes the scripting, and various other components provided by DenizenAPI. The scripting component of Denizen features easy to use script containers, replaceable tags, commands, and a queue system. Built aside is a slew of components that deal with many kinds of event handlers, many additional NPC features, a fully-featured variable system (we call them 'flags'), and a rich object-oriented set of features. I encourage users to start small when first getting into Denizen, but rest assured there are tons of features to explore.
Denizen NPCs? Yep, that's right. Denizen is probably best known as a way to create scripted Citizen NPCs. In fact, this whole project started out as an extension to Citizens2. You can use it to make interactive NPCs with the use of Assignment Scripts and Interact Scripts. This is pretty easy to do, and there's a bunch of cool NPC specific (among many other) commands and tags that you can utilize as well.
Here's a small example I call 'cookies'. I normally like to comment my scripts, but this one below is presented without any as to show the flow.
Cookies: type: assignment interact scripts: - 100 Cookie Handler Cookie Handler: type: interact steps: 'Spreading the Word*': click trigger: script: - random 3 - chat 'I like cookies!' - chat 'MMmm.. cookies are favorite!' - chat 'Cocoa and wheat me freak!' chat trigger: 'Cookies': trigger: 'I love /cookie/s!' script: - chat 'Me too!' - narrate '<npc.name> gives you some cookies.' - give i@cookie qty:6 - zap 'step:Cookies given' 'Cookies given': click trigger: script: - chat 'How were the cookies?' - zap 'step:Spreading the Word'
It's a simple 2-step, multi-trigger script that creates a cookie loving NPC. For some reason I think it's funny to name the NPC 'Notch'. Making a NPC use this script couldn't be easier, either. Simply use a bukkit command while having the NPC selected. It looks like this:
/npc assignment --set cookies
Now clicking on your NPC will use Denizen Triggers to activate the script above. An instant Denizen NPC! Cookies is funny, but hardly useful, and it's my personal philosophy that NPCs should be useful. How 'bout a simple healer? This NPC will heal you, but only when you're seriously injured.
Basic Healer: type: assignment interact scripts: - 100 heal me, bro! Heal me, bro!: type: interact steps: "Need a heal?*": click trigger: script: - if '<player.health>' < '<m:<player.health.max> / 2>' { - look <player.location> - chat 'Woah dude, you are <player.health.formatted>! You could use a heal!' - chat 'Just give me another click to get some power!' - zap "Healin'" duration:30s } else { - look <player.location> - chat 'Nice an healthy. Keep it up!' } "Healin'": click trigger: script: - ^zap 'need a heal?' - ^engage - chat "Here goes nothin'!" - playeffect instant_spell <npc.location> qty:25 - playeffect heart <player.location> qty:25 offset:1 - heal <player> - disengage
How do you make a Healer NPC with this script? You guess it! Just select that NPC, and type:
/npc assignment --set 'basic healer'
It's not just for NPCs. I guess I already told you that, but Denizen has some other script types that open up possibilities that extend far beyond it's core functionality of utilizing NPCs. One of my favorite 'simple scripts' that I like to show people is one that my friend Blankiito showed me. The one below is slightly modified, but basically it enables a 'rogue-like feature' that makes a player invisible when sneaking. It's a simple concept, but perfectly illustrates the flow of a Denizen Script.
Rogue: type: world debug: false events: on player starts sneaking: - playeffect <p.location> magic_crit qty:10 - invisible <player> state:true on player stops sneaking: - invisible <player> state:false
Even small scripts can be incredibly useful for your server. Sometimes scripts can replace entire bukkit plugins, and since the 'code' is in Denizen Script, the end result is often times more flexible to you, the server operator. Have a plugin that run some commands every once in awhile? Replace it with a simple Denizen script.
Auto Save Event Handler: type: world debug: false events: on 5:00 in world: - announce 'Autosaving...' - execute as_server 'denizen save' - execute as_server 'citizens save' - execute as_server 'save-all'
Use Denizen to solve problems, or to make features easier to use. Example: If you're familiar with Citizens, you may have realized that WorldGuard's /butcher command is not friendly to mob-type NPCs. It removes them, too, which can be a pain! Why not write your own /butcher command?
Safer Butcher Handler: type: world debug: false events: on sbutcher command: - narrate 'Removing all mob entities within 15 blocks... your NPCs are safe!' - foreach <player.location.find.entities.within[15]> { - if <%value%.is_mob> remove %value% }
Denizen Quests are the best quests. If you're like me, this whole thing started by using the Quester for Citizens1. It featured a fairly simple questing structure to implement things like 'kill quests' and 'collection quests'. When Citizens went to version 2, that functionality was no longer 'core', but no worries Denizen can help! By utilizing Denizen's Player Listeners, simple questing can be done easily, and it's more robust because you can use all the other features implemented by Denizen, too!
So, how do you best get started? This is a question we get all the time. Because of the enormous amount of ways to use and customize Denizen, we suggest that you simply START SMALL! Checking out the videos, scripts, and articles on denizen-docs you're sure to find a comfortable place to start. While scripting, utilize the tools provided, such as the SublimeText2 grammar pack, and the reference and search for meta lookup on this site.
Like any programming language, there is a learning curve with code structure and syntax that will only be overcome by trial and error. While using some user-made scripts can be as easy as dragging-and-dropping, many scripts will likely require at least a basic understanding of the denizen-script structure to fully utilize their features. But don't worry! Denizen is purposefully made to be easy to read and easy to customize! Tags, commands and events are all very verbose, easy to follow. With a little bit of research we know you'll soon be drunken with power, just like us!
Videos
Other useful links
- Denizen Handbook (Outdated kind of, but has some useful information still.)
- User-made beginner's guide
- Citizens2 Wiki
-
View User Profile
-
Send Message
Posted Apr 16, 2014@Gobyslayer
Er... YEAH. Exactly. You're running CB 1.7.5, not 1.6. Exactly. You're running the Denizen build made for 1.6 on a 1.7 server. You need to get the Denizen version build for 1.7.5, which I've linked you to below and I'll link again here: http://ci.citizensnpcs.co/job/Denizen/1461/
-
View User Profile
-
Send Message
Posted Apr 15, 2014@mcmonkey4eva but I'm using craft bukkit 1.7.5 not 1.6.2 also when running this version on my server errors spam the start command it's like the plugin is having a seizure anyway I thought I would say thanks for all the help you are giving me I have spent hours trying to fix all these. Such is the life of a server owner I guess but I am going to retry the sentries soon and i will update you on that. Maybe by regenerating the files and decreasing the range maybe then my Legionnaires will be able to fire arrows right
-
View User Profile
-
Send Message
Posted Apr 15, 2014@Gobyslayer
For the sentry, also try moving it around to different places... I saw that happen a few times on my servers... I've no idea what causes it or what fixes it all, I know is it comes and goes with time.
For the Denizen error - That error literally cannot happen from another other than having the wrong version. That error even specifically identifies itself as being the Denizen v0.9.4 for 1.6.2 (Build Unknown)... AKA the 1.6 build uploaded here to BukkitDev, AKA *not* either the dev builds I said to try...
-
View User Profile
-
Send Message
Posted Apr 15, 2014@mcmonkey4eva i tried that but the same error message came up whats going on? that was the same version also the piles float on the npcs where they are so it doesnt seem like they ae shooting at the ground but rather cant shoot at all the arrows spawn but dont move also when using items like blaze rod the fireball explodes immediately instead of moving. My sentry range is 50 im gonna try that and see if it works to decrease it
-
View User Profile
-
Send Message
Posted Apr 15, 2014@Gobyslayer
You're running Denizen for 1.6.2 on a 1.7.x server. Check the dev builds page http://ci.citizensnpcs.co/job/Denizen/ and find the Denizen build that matches your CB version. For 1.7.8, it's just the latest builds. For 1.7.5, it's this one: http://ci.citizensnpcs.co/job/Denizen/1461/
Also, I've seen issues with Sentry NPCs shooting at enemies that are underground instead of visible targets (thus creating huge piles of pointless arrows on the ground) - ATM, that issue is still being investigated.
-
View User Profile
-
Send Message
Posted Apr 15, 2014@mcmonkey4eva [15:08:52 ERROR]: Error occurred while enabling Denizen v0.9.4-1.6.2-SNAPSHOT (build Unknown) (Is it up to date?) java.lang.NoClassDefFoundError: net/minecraft/server/v1_6_R3/EntityHuman at java.lang.Class.getDeclaredConstructors0(Native Method) [?:1.6.0_65] at java.lang.Class.privateGetDeclaredConstructors(Class.java:2446) [?:1.6.0_65] at java.lang.Class.getConstructor0(Class.java:2756) [?:1.6.0_65] at java.lang.Class.getConstructor(Class.java:1693) [?:1.6.0_65] at net.citizensnpcs.api.trait.TraitInfo.create(TraitInfo.java:72) [?:?] at net.aufdemrand.denizen.Denizen.onEnable(Denizen.java:226) [?:?] at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:250) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-14-g8f8716c-b3042jnks] at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:324) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-14-g8f8716c-b3042jnks] at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:404) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-14-g8f8716c-b3042jnks] at org.bukkit.craftbukkit.v1_7_R2.CraftServer.loadPlugin(CraftServer.java:441) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-14-g8f8716c-b3042jnks] at org.bukkit.craftbukkit.v1_7_R2.CraftServer.enablePlugins(CraftServer.java:375) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-14-g8f8716c-b3042jnks] at net.minecraft.server.v1_7_R2.MinecraftServer.n(MinecraftServer.java:344) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-14-g8f8716c-b3042jnks] at net.minecraft.server.v1_7_R2.MinecraftServer.g(MinecraftServer.java:319) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-14-g8f8716c-b3042jnks] at net.minecraft.server.v1_7_R2.MinecraftServer.a(MinecraftServer.java:275) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-14-g8f8716c-b3042jnks] at net.minecraft.server.v1_7_R2.DedicatedServer.init(DedicatedServer.java:175) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-14-g8f8716c-b3042jnks] at net.minecraft.server.v1_7_R2.MinecraftServer.run(MinecraftServer.java:426) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-14-g8f8716c-b3042jnks] at net.minecraft.server.v1_7_R2.ThreadServerApplication.run(SourceFile:618) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-14-g8f8716c-b3042jnks] Caused by: java.lang.ClassNotFoundException: net.minecraft.server.v1_6_R3.EntityHuman at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:67) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-14-g8f8716c-b3042jnks] at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:62) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-14-g8f8716c-b3042jnks] at java.lang.ClassLoader.loadClass(ClassLoader.java:306) [?:1.6.0_65] at java.lang.ClassLoader.loadClass(ClassLoader.java:247) [?:1.6.0_65] ... 17 more this is the build you gave me and i have 1.7.5 also any sentries that would use projectiles would shoot but right on them for example the archer will shoot arrows but they wont travel and hit the ground just leaving huge piles of pointless arrows
-
View User Profile
-
Send Message
Posted Apr 14, 2014@Gobyslayer
Could you please post the error message?
@Gobyslayer
... huh?
-
View User Profile
-
Send Message
Posted Apr 14, 2014@mcmonkey4eva There seems to be one more problem Sentries that use projectiles have it so that the projectiles dont travel at all
-
View User Profile
-
Send Message
Posted Apr 14, 2014@mcmonkey4eva Thank you so much for your help i cant thank you enough i dont know what happened with the guards earlier but it stopped now but anyway there is one last problem denizen wont work right every time an npc is hurt a huge error message comes up! can you help me with theis last thing?
-
View User Profile
-
Send Message
Posted Apr 13, 2014@Gobyslayer
@Gobyslayer
There's an edit button y'know.
It works Minecraft/CraftBukkit 1.7.5, which is this C2: http://ci.citizensnpcs.co/job/Citizens2/1098/ and this Denizen: http://ci.citizensnpcs.co/job/Denizen/1460/ (Sentry is on the wiki, find appropriate version in the 'Updates' box of the Sentry page)
I have absolutely no idea why swords would disappear. Perhaps you have another plugin messing with it? (I've seen plugins that don't let new players hold weapons until they register - plugins that do anything like this almost always wind up messing with NPCs)
-
View User Profile
-
Send Message
Posted Apr 13, 2014@mcmonkey4eva ok i get it now but what version was it that worked? i would downgrade it for that feature! lol also what of my sentries swords vanishing with no trace? They disappear at random and after I restart they reappear
-
View User Profile
-
Send Message
Posted Apr 13, 2014ok i get it now but what version was it that worked? i would downgrade it for that feature! lol also what of my sentries swords vanishing with no trace?
-
View User Profile
-
Send Message
Posted Apr 13, 2014@Gobyslayer
Eck, poor timing. When I wrote that post, /npc skin would reskin an NPC.
However, Mojang recently made an update (Minecraft v1.7.6-v.1.7.8) that makes giving NPCs any skins at all entirely impossible. This is messing with all Citizens users, and users of plugins like DisguiseCraft as well. Unfortunately, Mojang's devs are very adamant about enforcing this moronic new restriction, so we may never be able to skin NPCs again :(
-
View User Profile
-
Send Message
Posted Apr 13, 2014one last thing when my sentries attack mobs and do the block animation there weapon dissapears and will not reeapear unless the server is stopped or the sentry dies
-
View User Profile
-
Send Message
Posted Apr 13, 2014any help? and do i need sprout to use this?
-
View User Profile
-
Send Message
Posted Apr 13, 2014@mcmonkey4eva i have citizens latest dev and it works fine but it has no response to the /npc skin thing i did it like you said but they are all steves -_- for example in my spawn castle i had an npc named Lord Gobyslayer so people could ask questions to him about basic server stuff while i was away however the new version says the whole skin command and now whenever i use /npc skin <Gobyslayer> there is no responce at all any help?
-
View User Profile
-
Send Message
Posted Apr 10, 2014@Drainal
If you're running the latest dev builds of Citizens on Minecraft 1.7.5, you can do "/npc skin <name>" where <name> is the name of the user account that has the skin you want. Note that this may not continue working in future minecraft version, and you may be limited to only using skins that match the nameplate.
-
View User Profile
-
Send Message
Posted Apr 10, 2014Is it possible (when creating a denizen/citizen) to make them have a certain skin?
-
View User Profile
-
Send Message
Posted Apr 9, 2014@nullschritt
HTTP: No... and probably not happening. That's a bit excessive.
Database: We have plans to add proper SQL support (both for the saves file and a script command to interact with the database)... no idea when that's coming, but... planned...
@mrretrus
It's actually not incredibly complex to do a check like that. Here's an example script that shows how you might choose to deal with giving 3 items with that check involved: http://mcmonkey.org/haste/3349
-
View User Profile
-
Send Message
Posted Apr 9, 2014Is it possible to check for inventory spaces? Not for an item- but if there is X amount of open slots in a players inventory. Reason being- I want to give an item as a reward- but if the player has no space the item cant be received! its not just for one space either- it would need to check for X spaces (lets say 3) so that its not (check for space, give item one, check space oh no room!- how to give the other two items now without the first? crazy zappage?)
Check for X space- if not then say "you dont have enough room in your inventory" or something