Every person who has played the "Skyblock" game mode in Minecraft knows how important and fun challenges are. Unfortunately, in most Skyblock plugins, the challenges are very limited to just a few tasks, such as "Have x carrots in your inventory" or "Place x stone blocks on your island." The same goes for the range of rewards, which is often very restricted. The goal of this "Challenges" plugin is to bring a real sense of challenge to players by introducing new, never-before-seen tasks while maintaining a simple and efficient management system for both players and staff. A variety of unique rewards can be offered to players to motivate them to complete these increasingly crazy tasks.
This code is provided for exposition and demonstration only. You are not allowed to:
- Download a compiled release of this project for public use.
- Compile or use any of this code, whether for commercial or non-commercial purposes.
Any use of this code in violation of these restrictions, especially on publicly accessible servers or for paid services, constitutes a breach of the terms. If you wish to discuss a specific use case, please contact me directly.
- Spigot/Paper 1.20
- SpigotApi
- SuperiorSkyblock2
- VaultAPI
The idea behind this plugin didn't come from me. In fact, it originated when the Skyblock staff of the Uni-Craft server wanted to launch a new version of the game mode to bring something fresh for the players. That's when the idea of more advanced challenges came to mind. A large part of the theory, design, and concept was envisioned by the former Skyblock staff, including Auristelle, BlackT8, LRDB, and SuperTV.
I handled the implementation myself, based on what was planned by the staff team.
The plugin is fully configured using JSON. It is highly advanced, allowing the creation of an infinite number of objects and challenges organized into different categories. However, with hundreds of lines of JSON, human error can happen quickly. That’s why a GUI application was developed (in C#) in addition to the plugin (in Java) to simplify editing and better visualize challenges when staff members need to make changes. The staff member starts an editing session from the Minecraft server and can then log into the C# application using a temporary token. The application connects to the Minecraft server via a socket, and any changes are made live.
- Find the application's repository at the following URL: Challenges_App
It’s time to present the plugin's various features. Starting with a brief description: Challenges are displayed and managed through an inventory interface that any player with an island can open. Once opened, the inventory shows categories, which group together challenges with similar themes—like all challenges related to construction. Players can explore each category to find numerous challenges, all presented in an interactive inventory.
A category or challenge can be locked behind the completion of another challenge. For example, the challenge "Carrot I" must be completed before attempting "Carrot II." Similarly, completing the final challenge in the "Carrot" category may unlock the "Potatoes" category.
When a player completes a challenge, they receive a reward. All players on the island can contribute to the progress of a challenge. For instance, Player1 donates 15 carrots, and Player2 donates 17 carrots to the same challenge; the progress will then show as 32/x carrots donated.
Players can open this interface using the /challenge or /c command once they are on their island. Each item represents a category. The arrows at the bottom allow players to navigate between pages.
![]() |
|---|
| The challenges main menu |
A category contains several challenges within it. A category can be either locked or unlocked. If an item icon appears, the category is unlocked. If a red glass pane appears, the category is locked. By clicking on it, players can see which challenge(s) need to be completed to unlock it.
![]() |
|---|
| An unlocked category |
![]() |
![]() |
|---|---|
| A locked category | Missing challenges to unlock |
![]() |
|---|
| For convenience, the player can try to complete the challenge by clicking on the text |
Let’s now get to the heart of the matter: the challenges. Each category contains a series of challenges. Players can open a category simply by clicking on the icons, as described in the previous section. Just like categories, a challenge can be either locked or unlocked. Similarly, locked challenges are displayed with a red glass pane, and players can click on them to see the missing requirements.
![]() |
|---|
| Challenges of the Carrot category |
A challenge always includes the following:
- Name: The title of the challenge.
- Description: A brief explanation of the challenge.
- Requirements: A list of tasks or items needed to complete it.
- Rewards: A list of what players receive upon completion.
- Completion Count: How many times the challenge has been completed in total.
- Daily Completion Count: How many times it has been completed today.
Some challenges can be completed multiple times, while others cannot. For repeatable challenges, the requirements become progressively more demanding with each completion.
![]() |
![]() |
|---|---|
| This challenge has been completed one time and cannot be completed anymore | This challenge is infinite with augmenting requirements each (daily) completion |
![]() |
|---|
| The player completed the same challenge multiple times, thus augmenting the carrot needed each time |
The daily completion count is reset for each island every day at 4:00 AM. As a result, the completion requirements are reset to their simpler initial levels.
Finally, challenges are divided into four different types. See the list below:
Inventory challenges are quite straightforward. They require players to have a certain number of specific items in their inventory at the time of completing the challenge. As a player progresses in an inventory challenge, the items used are removed from their inventory.
![]() |
![]() |
|---|---|
| The player progressed a challenge | The player completed a challenge and received the reward |
Some challenges may require very specific items, such as dyed leather armor, potions, or enchanted books. Since it would take too long to list all the item metadata directly on the challenge, players can right-click on the icon to view a detailed list of the required items and special rewards.
![]() |
|---|
| By right clicking the challenge, more details about requirements are displayed |
"Island" challenges are those that require players to have a certain number of blocks/entities placed on their island. These challenges cannot be "progressive." When completing the challenge, the player must have all the required blocks/entities placed around them within a certain radius. Either the requirements are met and the challenge is completed, or they are not, and the challenge is rejected. The blocks/entities counted in the challenge are not removed from the island once the challenge is completed. The goal of these challenges is to encourage players to build monuments and works of art on their islands.
![]() |
|---|
| Fails because of the missing squid, then adding it and complete the challenge |
"Statistical" challenges are challenges that track the actions of players. For example, "Jump 500 times," "Craft 256 torches," "Kill 50 skeletons," etc. They work a bit differently from other challenges. These challenges must be activated by a player from the island, and only one challenge can be active at a time. The challenge will remain active until it is either completed or canceled by a player from the island. All players on the island contribute to completing the challenge. This means that if the goal is to kill 50 skeletons and Player1 kills 27 and Player2 kills 23, the challenge can be completed.
![]() |
|---|
| An inactive statistic challenge |
![]() |
|---|
| A player tried to enable a second statistic challenge before ending the first one |
![]() |
|---|
| A player complete the current active statistic challenge by mining the last missing block |
And finally, three additional types of challenges.
- Island Level: Every time players place blocks on their island, their island level increases. The challenge requires the island to be level x.
- Money (Uniz): The player attempting to complete the challenge must have x amount of money in their bank account.
- Experience: The player attempting to complete the challenge must have x levels of experience.
For Money and Experience, the amount can be deducted from the user's account when completing the challenge, just like inventory challenges, or not. It is up to the administrator to choose this in the challenge configuration.
A challenge can require any combination of the three types, but it is not mandatory. A challenge could very well ask for 1,000$ without requiring 10 levels of experience.
![]() |
|---|
| Adding a block to increase the island level then completing the challenge |
| Note that in this challenge, neither the money (10,000$) nor the experience levels (10) were deducted. |
The rewards section deserves a whole paragraph in this file because it is very detailed. Each challenge is completed at least once per island. After that, some challenges can be re-completed. This is why the reward system is divided into two sub-sections: "First-reward" and "Next-reward." This way, it is possible to offer significant rewards with unique content for the first completion of a challenge on an island, and then continue rewarding the efforts of "farming" on subsequent completions, but perhaps with a smaller or completely different reward. Of course, a challenge that can only be completed once is not affected by the "Next-reward" and can be ignored.
In a second step, each reward is divided into 5 sub-rewards, which may or may not be included in the final reward. The 5 sub-rewards apply to both the "First-reward" and the "Next-reward" and can be completely different. For example, the "First-reward" may include money and items, while the "Next-reward" may consist of experience levels. The strength of this system lies in the administrator's flexibility with the rewards, allowing them to easily manage which items are available in what quantities at any point during the progression of an island.
Finally, a sub-reward can have a 'proc' chance. If you feel that giving a villager spawn egg for each completion is too powerful, but still want to allow players to obtain some through farming, Luck rewards are the solution!
![]() |
![]() |
|---|---|
| The First Reward (0 total completions) | The Next reward (1+ total completions) |
Let's dive in the sub-rewards now!
The 'Command' reward is not visible to players and does not appear in the [Reward] section of a challenge. It is a special reward designed to execute more complex server-side actions. A good example would be unlocking the 'Nether' island when a specific Nether-related challenge is completed. In SuperiorSkyblock2, there is a command (´/cad island acs nether true´) that admins can run to unlock the Nether world for any island. The only thing needed to execute this command automatically is to identify the player who completed the challenge. To achieve this, placeholders have been set up. The placeholder '{P}' is replaced with the player’s name when the command is run by the server.
![]() |
|---|
| Helheim is unlocking the Nether Island when completed |
The challenge's first reward would be configured like this. So from now, when a player complete this challenge, it will unlock the Nether world for his whole island.
{
"First": {
"Commands": [
"cad island acs nether {P} true"
]
}
}The "Message" is not really a reward for the player but is part of the system. When a player completes a challenge for the first time, a message is broadcasted to the entire server. For all subsequent completions, a simple personal message is sent to the player as "feedback" confirming that they have successfully completed the challenge.
Since the message is almost always identical, it is stored in global configuration files, and the key is simply referenced in the challenge configuration. This way, if the admin wants to change the message sent upon challenge completion, it is updated for all challenges. At the same time, there is the option to set a custom message for a specific challenge if needed.
![]() |
|---|
| Example when a player complete a challenge for the 2nd time |
This reward just gives money or experience orbs/levels to the player which complete the challenge.
- Experience ORB: Just a sub-division of a full experience level
- Experience LEVEL: Well, a full green bar of experience on top of the player's hotbar.
Granting full experience levels isn’t always 'fair' for all players. For example, if you award 3 experience levels, a player already at level 54 will receive 1,228 experience points (enough to go from level 54 to 57), while a player at level 4 will only get 51 experience points (enough to go from level 4 to 7). Keep this in mind and use this option carefully.
Grants customisable items to the player upon completion. Items can range from basic ones, like simple dirt or stone blocks, to very complex and unique ones, such as swords with normally impossible enchantments or leather armor in unusual colors!
![]() |
![]() |
|---|---|
| A custom reward for the Acacia Challenge | The given item has a custom meta |
Here are the metadata currently supported by the plugin (These are handled by my SpigotApi Meta library);
- Written Book Add title, author signature and text inside it
- Leather Armor Customize the colour
- Potion Normal, Splash and Area potions are included. Add as many effects on them, choose the duration and level of each effect
- Skull Gives own player skulls, Minecraft-Heads customizable heads like the Earth, letters, etc... or any user's head!
- TrimArmor Customize skins on armor
- TropicalFish Set an infinite combo of colour and patterns for fish eggs
The entire plugin is currently available in English and French, with separate language files stored in the plugin's configuration. Adding a new language is simple: just copy EN.json, rename the file to something like FR.json or EN.json and place it in the Lang folder. Then, replace all the JSON values with the appropriate translations for your language. That’s it! Players can then select any supported language directly in the game.
] |
|---|
| *Changing the lang in game with /c lang |
Staffs have special tools to moderate challenges and islands in game, from disabling challenges to resetting an island's challenges completions (i.e. in case of cheating). Find all the permissions at the end of this file.
- /cadmin || Can enable or disable the whole plugin for players. For the status argument, check the illustration below.
- /cadmin reload | Can reload the
config.jsonfile or theLangfolder. Which allows minor changes to be affected directly without restarting the server. - /cadmin cat|cha Sends the player a list of information about this category or challenge. See the illustration below.
- /cadmin toggle cat|cha Can enable or disable a specific category or challenge for player. Maybe if you're working on it or a bug has been found.
- /cadmin island Opens the main menu challenge inventory from the player's island but as admin mode. Check the illustration below.
- /cadmin editor |<kill [reason]> Generates a token to the player for the Csharp application. The player is able to edit any category/challenge inside the app
![]() |
|---|
| The /cadmin status command gives general information about the plugin's state |
![]() |
|---|
| The /cadmin cha|cat gives general information about a category or challenge |
![]() |
|---|
| The /cadmin island <player> let the admin see general information about the island, enable/disable world islands or reset the whole challenges for this island |
![]() |
![]() |
|---|---|
| It also allows an admin to reset a whole category by right clicking on it | It shows that only 1 over 7 challenges are now unlocked |
![]() |
![]() |
|---|---|
| An admin can decide the number of times any challenge has been done in total or daily | Final result when, as a player, i'm running the /c command |
Inside the editor, an admin would be able to fully edit ANY category or challenge, from the name of the challenge to the enchantment on one of the item given as reward. Please check the README.md file from this repository if you're interested on learning how the application is working.
- Open the main menu
/cor/challenge - Open a category directly without going through the main menu
/c <category name> - Try to complete a challenge
/c c <challenge name>or/c complete <challenge name> - Cancel an active statistical challenge
/c cancel CONFIRM - Change the lang
/c lang <lang>|reset
All of them: challenge.use.*
- challenge.use.command Enables the player to use the
/cor/challengecommand - challenge.use.complete Enables the player to use the
/c complete <challenge name>command - challenge.use.cancel Enables the player to wheel click on an active statistical challenge or use the
/c cancel CONFIRMcommand to drop an active challenge
All of them: challenge.admin.*
All of the toggle: challenge.admin.toggle.*
All of the reload: challenge.admin.reload.*
All of the editor: challenge.admin.editor.*
- challenge.admin.use Enables the player to use the
/cadmincommand which display help - challenge.admin.toggle.all Enables the player to toggle state of the plugin (command
/cadmin enable|disable) - challenge.admin.toggle.cat Enables the player to toggle a category on/off with the command
/cadmin toggle cat <category> - challenge.admin.toggle.cha Enables the player to toggle a challenge on/off with the command
/cadmin toggle cha <category> - challenge.admin.reload.config Enables the player to reload the global configuration file (
config.json) - challenge.admin.reload.lang Enables the player to reload the folder
Lang(to update a translation or adding a new lang) - challenge.admin.editor.island Enables the player to edit every island's challenges. From total/daily completion to full reset.
- challenge.admin.editor.app Enables the player to use the command
/cadmin editor new|killto open or kill a session with the Csharp application - challenge.admin.promptable Allows the player to open a sign interface and write text in it to send it to the server. Useful for the island editor.
- challenge.admin.bypass Enables the player to still access any challenge even if the plugin is disabled or a category/challenge is disabled






























