Custom Events is a highly customizable plugin that gives you the power to completely customize your server, all from an in-game GUI. It's almost like making your own custom plugins — but you don't need to know how to code.
Keep reading to see just a few of the things you can do with Custom Events
All of this is possible without any coding. Click on any one of the gifs full a slower, full-size version
Here's a short list of just a few of the things you can make with Custom Events, without any coding:
⭐ Make creepers explode with fireworks
⭐ Track player stats to make your own quests
⭐ Hook in with CustomItems to make armor that evolves
⭐ Custom join, leave, and death messages and actions
⭐ Store the player's last death location
⭐ Make it so creepers explode when they fall in lava
⭐ Create skills for players, like increasing "fall resistance" every time they take a fall more than 10 blocks.
⭐ And many, many more things — the only limit is your imagination. If you have an idea but aren't sure if it's possible, just ask!
CustomEvents is extremely easy to learn, and because you can do everything from the in-game GUI, it's extremely easy to use as well
Usage
Open the CustomEvents GUI with /ce create. From the in-game GUI, you can pick different actions that you want to happen on different events, like when a block breaks, when a player takes damage, and more!
CustomEvents is extremely easy to use and easy to learn.
This guide has a lot of photos and text to show you exactly how everything works. Don't get scared by the length of this guide! You could just as easily type /ce create and create your first trigger without reading any of this, and you'd most likely be just fine.
Type /ce create to create your first CustomEvents trigger list. When the GUI opens, click the "Add Event" button to add your first event
You'll see a huge list of available events show up. There's quite a lot, some more useful than others. It's actually all of the events available from Minecraft! Let's choose Block Fertilize, so our event will run every time a player uses bonemeal to fertilize a block.
You can check out all of the available events at https://hub.spigotmc.org/javadocs/spigot/index.html by clicking on each of the org.bukkit.event. packages like org.bukkit.event.player.
After you click the Block Fertilize trigger, you'll be brought back to the first screen, and you'll now see Block Fertilize as one of the triggers in the list. Click on it and we'll add some actions!
After clicking on the Block Fertilizer event on the first screen, click Add Action to add your first action. Clicking that will bring up this screen. Here, we could see a few different options of who we could run the action on — we could run an action on the server (like broadcasting a message), on the clicked block (like making it explode), on the console (like running a command), or something else. Let's select player to run our action on the player
You'll see a huge list of available actions show up. Again, there's quite a lot, with some of them being more useful than others. This is also all of the actions available from Minecraft! Let's choose sendMessage here, so our action will be to send the player a message
You can now see all of the available action parameters on the right hand side of the action. Let's click on the message parameter to choose what we say to the player.
We'll set it to say "Hey &c{player.name}&f, it looks like you just fertilized a &c{block.type}". You'll notice that we're using &color codes here to change the color of the message, and we're also using {placeholders}, which will be replaced automatically when the message is sent.
For example, if the player jojodmo fertilizes a grass block, the message will be "Hey jojodmo, it looks like you just fertilized a grass block"
When you're creating the action, you can run /ce placeholders BlockFertilize (in general, /ce placeholders <trigger type>) to get a list of the available placeholders.
Awesome, we just created our first action! Now, let's add a condition, to make our action only happen under certain conditions. Click on the Conditions button on the right side of the action (the icon is a hopper)
Next, click Add Condition to add your first condition. Of course, you can add multiple conditions, if you'd like. Then, select what you want the condition to be run on — we'll select player
You'll now see another huge list of things — this time, it's a huge list of conditions. Go to the second page, and select the InWater condition.
After adding the InWater condition, you'll see it show up in the conditions GUI. We'll keep it at false, so if the player is under water, the action won't run.
Click Go Back on every screen until the GUI closes completely. Then, type /ce reload to reload CustomTriggers.
Now, try fertilizing something with bonemeal. Congratulations! You just made your first trigger!
You can also
view this on imgur.com
Placeholders
Use placeholders like {player.health} or {block.type} to customize actions.
For example, when sending a message, you could send the message "Hey, {player.name}. You're at the location {player.location.x}, {player.location.y}, {player.location.z} in {player.location.world.name}, and if we divide your health by 2, you would have {player.health / 2} health"
You can even combine placeholders and do math on them, like this
{player.health + {player.exp * {player.level}}}.
List all available placeholders for a event with /ce placeholders <event> [parent]. For example, /ce placeholders BlockBreak to get all available placeholders for the BlockBreak event, and /ce placeholders BlockBreak block.location to get all available children to the block.location placeholder of BlockBreak (for example, block.location.x and block.location.world)
Variables (Globals)
Whenever you want to store some type of information, you can use globals! You can use globals to do things like
⭐ Save a player's progress through a quest
⭐ Store a player's statistics
⭐ Store the player's last death location
And more! You can also use globals with CustomItems
To save something as a global, you would use the "setGlobal" action. To check them, you can use the "global" condition. And, to print them out or use them elsewhere, you can use the {global.GLOBAL_NAME} placeholder, like {global.myGlobalNameHere}
You can also use {placeholders} in the names of globals to make globals for certain players or for certain worlds. For example, to store something globally for a world, you could name the global myGlobal_world_{block.world.name}. To store something about a player, you could name the global myGlobal_player_{player.uuid}. As a more complex example, you could also store something about the number of times a player has done something with a certain mob type in a certain world:
myGlobal_player_{player.uuid}_world_{player.world.name}_type_{target.type}
If you want to get the value of this global as a placeholder, just use
{global.myGlobal_player_{player.uuid}_world_{player.world.name}_type_{target.type}}
Let's use the global example above. If a player (we'll shorten their UUID to be "00abc00" for now) does something in the world "myCustomWorld" with a creeper, the global that's set will be
myGlobal_player_00abc00_world_myCustomWorld_type_CREEPER
And if they did the same thing with a zombie, the global would be
myGlobal_player_00abc00_world_myCustomWorld_type_ZOMBIE
Manually editing YML files
If you want, you can opt to not use the GUI, and instead manually edit YML files for your items. Keep in mind that this is for advanced users, and it's a lot simpler to just use the GUI!
Read more on the Manually Editing YML Files page