ItemJoin v5.1.0

Get custom items on join.

  1. RockinChaos
    Tested Minecraft Versions:
    • 1.7
    • 1.8
    • 1.9
    • 1.10
    • 1.11
    • 1.12
    • 1.13
    • 1.14
    • 1.15
    • 1.16
    Languages Supported:
    Spanish, French, Russian, Chinese

    This plugin grants the ability to give highly custom items to players upon join, respawn, world-switch, region-enter, region-exit, first-join, and first-world. This is a multi-purpose plugin for giving items to players on a hub server, minigame servers, or even competitive servers such as survival, factions, skyblock and other alternative game settings. You can set up an infinite amount of items for any specific world(s) you define. Players can be given the item every time upon joining or limit them to a set amount so they do not have any duplicate items. There are so many possibilities and limitless features but only if you want that ability. If there is a feature you are looking for it is likely to have already been implemented.

    [​IMG]

    [​IMG][​IMG][​IMG][​IMG]

    This plugin can be used with Chest Commands, BossShop, DeluxeMenu's, or even CustomGUI which will allow the creation of menus made of items which ItemJoin could have an item with a command bound to open these menus or to execute commands on a compass to warp players to specific locations. There are no specific restrictions for how ItemJoin can interact with other plugins, as long as the plugin of interest has commands to execute their objectives such as /menu, then ItemJoin can utilize that as an ItemCommand.


    [​IMG]
    This plugin is unique for its high functionality and hyperactive developer, if there is a feature that is missing or a new bug in the latest update it will be resolved swiftly. Out of the very few similar category plugins that give items, this is currently the only plugin out there that gives the player an item of their choice in a specific world, so players do not carry items to a black-listed world. If the world is not defined under the custom item players will not be given that item in the unspecified world although, items will transfer worlds unless it has been restricted, clear on world-switch or use a multi-inventory plugin. ItemJoin is always expanding and adding new quality of life features, other plugins are either out of date, inactive developer, missing features, or limiting items to a specific world is broken! ItemJoin was built on the idea of resolving these problems, to become the ultimate custom items on join plugin!


    [​IMG][​IMG]



    [​IMG]


    [​IMG]

    • Individual items can be defined with specific itemflags which give the item special utilizations and modified values.
    • Each item can be set with specific trigger events called triggers which will determine when the item will be given.
    • Items can be specified with their own specific ItemCommands which can be executed as an instance console, player, server, message and more available in the wiki.
    • ItemCommands can be executed with certain actions if defined, multi-click, left/right-click, physical, and/or inventory click, which will allow the user to define different commands for each action.
    • Executed commands can be charged an economical cost and put on a custom cooldown with custom sounds and particles.
    • Set custom skull textures and skull owners to player head items.
    • Supports custom features for player heads, tipped arrows, books, banners, fireworks, leather armor, map items, and more.
    • Every item slot is supported, including armor slots and crafting slots.
    • Restrict certain items to a players ip-address, reducing the chances of item abuse.
    • Give vanilla unmodified items as well as vanilla items which have the functionality of some defined features.
    • Dynamically updates items when a placeholder is changed.
    • Toggle blocking ALL item movement or ALL item pickups in specific worlds.
    • Items can be limited to specific gamemodes.
    • Specify custom item-usage cooldowns for items that have interaction events such as ender pearls or even food items.
    • Items can be given a probability of players receiving an item, a random chance.
    • General commands can be executed upon join, first-join, and world-switch.
    • Custom enchants and unsafe levels.
    • Toggle between clearing ALL or only ItemJoin items upon join or world-switch.
    • Toggle overwriting existing items in players inventories.
    • Supports PlaceholderAPI, see the valid placeholders.
    The number of features is limitless and its thanks to all of you supporting this plugin and the developer.


    [​IMG]

    Commands

    You can either use /ItemJoin or /IJ to execute a command.​
    Code (Text):
       itemjoin:
          description: Shows the plugin information, specific version, and author including a redirect
          to the help menu.
          permission: itemjoin.use
          aliases: [ij]
          usage: |
              /itemjoin
              Example: /itemjoin
       itemjoin help:
          description: Displays a page of the available help menu showing the available commands.
          permission: itemjoin.use
          usage: |
              /itemjoin help
              Example: /itemjoin help
              Example: /itemjoin help 2
              Example: /itemjoin help 3
              Example: /itemjoin help 4
              Example: /itemjoin help 5
              Example: /itemjoin help 6
              Example: /itemjoin help 7
              Example: /itemjoin help 8
              Example: /itemjoin help 9
       itemjoin reload:
          description: Reloads all plugin configuration files and caches any new data.
          permission: itemjoin.reload
          usage: |
              /itemjoin reload
              Example: /itemjoin reload - Configuration(s) Reloaded!
       itemjoin menu:
          description: Opens a GUI Menu to allow the view, modification, and creation of all custom items.
          permission: itemjoin.menu
          usage: |
              /itemjoin menu
              Example: /itemjoin menu - The creator menu has been launched!
       itemjoin info:
          description: Displays any needed information for the item you are holding, such as material type
          and in legacy versions the data-value.
          permission: itemjoin.use
          usage: |
              /itemjoin info
              Example: /itemjoin info - The item type is WOODEN_SWORD.
       itemjoin world:
          description: Shows you what world you are in, useful for debugging purposes.
          permission: itemjoin.use
          usage: |
              /itemjoin world
              Example: /itemjoin world - You are in the world Pandora_the_end.
       itemjoin list:
          description: Shows you what items are defined and their respective enabled worlds.
          permission: itemjoin.list
          usage: |
              /itemjoin list
              Example: /itemjoin list - Current defines items are map-item, ultra-item.
       itemjoin updates:
          description: Checks for any available updates for the plugin.
          permission: itemjoin.updates
          usage: |
              /itemjoin updates
              Example: /itemjoin updates - You have requested to check for available plugin updates!
       itemjoin autoupdate:
          description: Forces the plugin to update to the latest version if a new version is found,
          a server restart will be required for changes to take effect.
          permission: itemjoin.autoupdate
          usage: |
              /itemjoin autoupdate
              Example: /itemjoin autoupdate - You have requested to force update the plugin.
       itemjoin permissions:
          description: Displays a page of every permission node showing which permissions are
          enabled/disabled for the player, including custom item nodes.
          permission: itemjoin.permissions
          usage: |
              /itemjoin permissions
              Example: /itemjoin permissions - You have the permissions itemjoin.reload.
              Example: /itemjoin permissions 2 - You have the permissions ultra-item.
       itemjoin get:
          description: Gives the specified custom item and the amount you specified to the player's inventory.
          permission: itemjoin.get, itemjoin.get.others
          usage: |
              /itemjoin get
              Example: /itemjoin get Ultra - You have received the item [Ultra]!
              Example: /itemjoin get Ultra 12 - You have received 12x of the item [Ultra]!
              Example: /itemjoin get Ultra RockinChaos - You have given the item [Ultra] to RockinChaos!
              Example: /itemjoin get Ultra RockinChaos 8 - You have given 8x of the item [Ultra] to RockinChaos!
       itemjoin getOnline:
          description: Gives the specified custom item and the amount to all online players.
          permission: itemjoin.get.others
          usage: |
              /itemjoin getOnline
              Example: /itemjoin getOnline Ultra - You have given the item [Ultra] to RockinChaos!
              Example: /itemjoin getOnline Ultra 8 - You have given 8x of the item [Ultra] to RockinChaos!
       itemjoin getall:
          description: Gives all custom items to the specified player.
          permission: itemjoin.get, itemjoin.get.others
          usage: |
              /itemjoin getall
              Example: /itemjoin getall - You have received all of the ItemJoin items.
              Example: /itemjoin getall RockinChaos - You have given RockinChaos all of the
              ItemJoin items that are available.
       itemjoin remove:
          description: Removes the specified custom item and the amount you specified from the player's inventory.
          permission: itemjoin.remove, itemjoin.remove.others
          usage: |
              /itemjoin remove
              Example: /itemjoin remove Ultra - You have removed the item [Ultra]!
              Example: /itemjoin remove Ultra 12 - You have removed 12x of the item [Ultra]!
              Example: /itemjoin remove Ultra RockinChaos - You have removed the item [Ultra] to RockinChaos!
              Example: /itemjoin remove Ultra RockinChaos 8 - You have removed 8x of the item [Ultra] to RockinChaos!
       itemjoin removeOnline:
          description: Removes the specified custom item and the amount from all online players.
          permission: itemjoin.remove.others
          usage: |
              /itemjoin removeOnline
              Example: /itemjoin removeOnline Ultra - You have removed the item [Ultra] from RockinChaos!
              Example: /itemjoin removeOnline Ultra 8 - You have removed 8x of the item [Ultra] from RockinChaos!
       itemjoin removeall:
          description: Removes all custom items from the specified player.
          permission: itemjoin.remove, itemjoin.remove.others
          usage: |
              /itemjoin removeall
              Example: /itemjoin removeall - You have removed all of the ItemJoin items from your inventory.
              Example: /itemjoin removeall RockinChaos - You have removed all of the ItemJoin items from RockinChaos.
       itemjoin enable:
          description: Enables the use of custom items for all players or specified player globally
          or specified player and world.
          permission: itemjoin.enable, itemjoin.enable.others
          usage: |
              /itemjoin enable
              Example: /itemjoin enable - You have globally enabled custom items.
              Example: /itemjoin enable RockinChaos - You have enabled custom items for RockinChaos!
              Example: /itemjoin enable RockinChaos world_the_end - You have enabled custom items for RockinChaos
              in the world world_the_end!
       itemjoin disable:
          description: Disables the use of custom items for all players or specified player globally
          or specified player and world.
          permission: itemjoin.disable, itemjoin.disable.others
          usage: |
              /itemjoin disable
              Example: /itemjoin disable - You have globally disabled custom items.
              Example: /itemjoin disable RockinChaos - You have disabled custom items for RockinChaos!
              Example: /itemjoin disable RockinChaos world_the_end - You have disabled custom items for RockinChaos
              in the world world_the_end!
       itemjoin purge:
          description: Purges ALL data or the specified data from the database file for ALL players
          or the specified player.
          permission: itemjoin.purge
          usage: |
              /itemjoin purge
              Example: /itemjoin purge - You have purged ALL data from the database file!
              Example: /itemjoin purge first-join - You have purged ALL first-join data from the database file!
              Example: /itemjoin purge first-world - You have purged ALL first-world data from the database file!
              Example: /itemjoin purge ip-limits - You have purged ALL ip-limit data from the database file!
              Example: /itemjoin purge first-join RockinChaos - You have purged ALL first-join data of RockinChaos
              from the database file!
              Example: /itemjoin purge first-world RockinChaos - You have purged ALL first-world data of RockinChaos
              from the database file!
              Example: /itemjoin purge ip-limits RockinChaos - You have purged ALL ip-limit data of RockinChaos
              from the database file!


    Permissions
    Please note; permissions are case sensitive, including the world names!​
    Code (Text):
       itemjoin.*:
          description: Grants access to all aspects of the plugin, including every permission node.
          default: false
          children:
              itemjoin.all: true
       itemjoin.all:
          description: Grants access to all aspects of the plugin, including every permission node.
          default: false
          children:
              itemjoin.use: true
              itemjoin.reload: true
              itemjoin.menu: true
              itemjoin.updates: true
              itemjoin.autoupdate: true
              itemjoin.permissions: true
              itemjoin.list: true
              itemjoin.purge: true
              itemjoin.get: true
              itemjoin.get.others: true
              itemjoin.remove: true
              itemjoin.remove.others: true
              itemjoin.enable: true
              itemjoin.enable.others: true
              itemjoin.disable: true
              itemjoin.disable.others: true
              itemjoin.bypass.inventorymodify: false
       itemjoin.use:
          description: Grants access to basic plugin commands.
          default: true
       itemjoin.menu:
          description: Grants access to the menu command.
          default: false
       itemjoin.reload:
          description: Grants access to the reload command.
          default: false
       itemjoin.updates:
          description: Grants access to the updates command.
          default: false
       itemjoin.autoupdate:
          description: Grants access to the autoupdate command.
          default: false
       itemjoin.permissions:
          description: Grants access to the permissions command
          default: true
       itemjoin.list:
          description: Grants access to the list command.
          default: false
       itemjoin.purge:
          description: Grants access to the purge command.
          default: false
       itemjoin.get:
          description: Grants access to the basic get commands.
          default: false
       itemjoin.get.others:
          description: Grants access to all get commands that could affect other players.
          default: false
       itemjoin.remove:
          description: Grants access to the basic remove commands.
          default: false
       itemjoin.remove.others:
          description: Grants access to all remove commands that could affect other players.
          default: false
       itemjoin.enable:
          description: Grants access to the basic enable command.
          default: false
       itemjoin.enable.others:
          description: Grants access to all enable commands that could affect other players individually.
          default: false
       itemjoin.disable:
          description: Grants access to the basic disable command.
          default: false
       itemjoin.disable.others:
          description: Grants access to all disable commands that could affect other players individually.
          default: false
       itemjoin.bypass.inventorymodify:
          description: Players with this permission will bypass any item movement restrictions.
          default: false


    Item Permissions
    These are the permission(s) required for players who are not a server administrator to receive the item(s).
    Code (Text):
    itemjoin.<world>.<item>:
    description: Gives permission to get a specific item in a specific world.
    Replace the <item> argument with the name of the specified item and
    the <world> argument with the name of the world to receive that item.

    itemjoin.<world>.*:
    description: Gives permission to get all items from the specified world.
    Replace the <world> argument with the name of the world to receive that item.
    While this permission is NOT given by default, ALL items have their permission requirement disabled by default. In order for this permission to work (only if you intend on using item permissions), in the config.yml set Permissions.Obtain-Item to TRUE.

    If you want to have a custom permission node for each item, you can set up individual ones which will supersede the default node shown above. All you have to do is add the permission-node to your item, in this case, we will call it itemjoin.specialty but it can technically be anything such as chicken.fingers. The permission you choose will need to be given to the player and added to the item in this format permission-node: 'itemjoin.specialty'. Lastly, custom permission nodes can be used interchangeably with the default permission nodes in the instance where you only want a few items to have custom permission nodes.​

    Example(s):
    Code (Text):
    itemjoin.world_the_end.*
    itemjoin.world_the_end.ultra-item

    items:
      example-item:
        id: DIAMOND_SWORD
        slot: 0
        permission-node: 'itemjoin.specialty'

    If you want more detailed, better-explained commands and permissions they can be found on the wiki.


    [​IMG]

    English Tutorial(s)










    Italian Tutorial(s)

    [​IMG]
    [​IMG] [​IMG]



    [​IMG]

    Does ItemJoin have its own Custom API?
    • Yes, ItemJoin does in-fact allow other plugins to hook into it if needed. All API options are located under me.RockinChaos.itemjoin.api.ItemJoinAPI.
    • You can see all available methods here; Available Methods.
    • If you wish to see a method added feel free to submit a request on GitHub!

    Does ItemJoin support placeholders?
    • Yes, ItemJoin has few placeholders by default but you can hook ItemJoin with PlaceholderAPI for ultimate placeholders! Just set PlaceholderAPI to true in the config.yml

    Does ItemJoin support multiple worlds?
    • Yes, ItemJoin gives items to each specified world in the items.yml. Any worlds not defined in the items.yml will not receive items.
    • You can also have ItemJoin hook into Multiverse-Core & Multiverse-Inventories so you can have different items per world without clearing the player's inventory when they switch worlds. Just set Multiverse-core and Multiverse-Inventories to true in the config.yml.

    Can I get items on first-join only?

    • Yes, ItemJoin has extreme compatibility with first join mode. All you have to do is simply add the first-join itemflag to each item in the items.yml to get that item on first join only. You can make it so only a set of items are given on first-join and others are given every time, or simply just make it so all items on first-join. If you want to receive the item every time you join again, just simply remove the first-join itemflag from the item.

    Can I limit items to specific players ip-address?
    • Yes, ItemJoin has extreme compatibility with ip limit mode. All you have to do is simply add the ip-limit itemflag to each item in the items.yml to limit those items to the specific players ip. You can make it so only a set of items are given in an ip-limit and others are given regardless of the ip-address, or simply just make it so all items in an ip-limit. You can also specify the first-join itemflag to work alongside the ip-limit itemflag to limit items ip-address as well as give them upon first joining only.

    Does ItemJoin have any dependencies?
    • ItemJoin has ZERO required dependencies but there are some optional ones that can make your experience much better!
    • You can learn more about these API / Hooks on the wiki page.
      • Vault - You can hook into Vault to use your economy on ItemJoin's commands!
      • PlaceholderAPI - You can use all of these placeholders on any part of ItemJoin! Whether its commands, name, lore, skull-owner, book-lore, authors, etc! All parts of ItemJoin are hooked into PlaceholderAPI.
      • Multiverse-Core - Only used for Multiverse-Inventories as ItemJoin already has multi-world support without this.
      • MyWorlds - Allows easy multi-world support.
      • Multiverse-Inventories - Easily set world inventories using ItemJoin. You can make it so you get the items on join and world change without clearing the player's inventory! Very helpful with ItemJoin inventory management.
      • xInventories - Easily set world inventories using ItemJoin. You can make it so you get the items on join and world change without clearing the player's inventory! Very helpful with ItemJoin inventory management.
      • PerWorldInventory - Easily set world inventories using ItemJoin. You can make it so you get the items on join and world change without clearing the player's inventory! Very helpful with ItemJoin inventory management. I have recently seen this plugin start to pop up everywhere and it seems like an amazing alternative to Multiverse-Inventories.
      • PerWorldPlugins - As it is not recommended since ItemJoin is disabled in any world that is not defined under world-list but, ItemJoin does support PerWorldPlugins if you happen to have it running on your server for some reason and ItemJoin will be disabled in worlds that are not allowed by PerWorldPlugins.
      • AuthMe - Items will be given after the player types the login command and fully registers to AuthMe.
      • WorldGuard - Items will be given after the player enters the specified region defined under each item, upon leaving the region the items will be revoked. This allows the creation of region only items and can only be used in the specified regions unless defined otherwise.
      • TokenEnchant - Items will now be able to be given specific TokenEnchantments when receiving them.
      • BetterNick - If items for some reason end up breaking and you use this plugin, setting this to true could resolve issues with items not working properly. This allows ItemJoin to easily find your original player name and UUID if you are nicknamed using BetterNick.
      • HeadDatabase - Items can now hook into HeadDatabase and fetch player heads from there using <hdb-head id>.

    More Information on ItemJoin can be found here;
    https://github.com/RockinChaos/ItemJoin/wiki


    [​IMG]

    A massive thanks to those who have donated to help support the plugin's development. It is not the amount donated that matters, it is the fact that these supporters donated to support what they love. Even the smallest donation means so much because it grants the feeling that I have created something that is wanted. Every donation inspires and gives me the motivation to keep this plugin alive and thriving.
    HTML:
    <Awesome Crafters>
        TheRobLP         =>         $50.00USD
        momoservertw     =>         $35.00USD
        Terbin           =>         $20.00USD
        Siuan            =>         $20.00USD
        JackScurvy       =>         $10.00USD
        Jaocb            =>         $5.00USD
        Kubson_19        =>         $5.00USD
        TheColdEmerald   =>         $1.00USD
        Vxrrxckter       =>         $1.00USD
        CloneMC          =>         $0.55USD
        Slimedog         =>         $UNKUSD
        piggalotgaming   =>         $UNKUSD
        XYBlue           =>         $UNKUSD
        Moemilords       =>         $UNKUSD
        Askarion         =>         $UNKUSD
    </Awesome Crafters>
    Supporters who are listed with an UNK value are those who I am unable to calculate the amount donated. If you are of these supporters and know the amount you contributed, please contact me and I will fill in the proper value. If you wish to be apart of these amazing supporters, consider donating as it is the best way to say thanks to the developer!

    [​IMG]



    ★ Requested Changes ★
    Please Pm me with feature requests! I will always look them over and get back to you.
    Crossed Out requests means that they have been completed.
    no.1) ...​
    [​IMG]
    [​IMG] [​IMG]

Recent Reviews

  1. mijo1652
    mijo1652
    5/5,
    Version: v5.1.0
    Works perfect, author is really helpful. I recommend this plugin. You are doing a good job! Thank you :) .
    1. RockinChaos
      Author's Response
      Thank you for the amazing review! I am glad that you had a good experience, I am always happy to help!
  2. TheBuilder_BT
    TheBuilder_BT
    4/5,
    Version: v5.1.0
    Help me pls: [11:15:03 WARN]: [ItemJoin] Plugin ItemJoin v5.1.0-RELEASE-b545 generated an exception while executing task 11016
    java.lang.IllegalStateException: Asynchronous entity add!
    at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:15) ~[patched_1.16.2.jar:git-Paper-189]
    at net.minecraft.server.v1_16_R2.WorldServer.addEntity0(WorldServer.java:1146) ~[patched_1.16.2.jar:git-Paper-189]
    at net.minecraft.server.v1_16_R2.WorldServer.addEntity(WorldServer.java:1083) ~[patched_1.16.2.jar:git-Paper-189]
    at org.bukkit.craftbukkit.v1_16_R2.CraftWorld.dropItem(CraftWorld.java:750) ~[patched_1.16.2.jar:git-Paper-189]
    at me.RockinChaos.itemjoin.listeners.Entities.lambda$onMobDeath$0(Entities.java:49) ~[?:?]
    at me.RockinChaos.itemjoin.handlers.ServerHandler.lambda$runAsyncThread$0(ServerHandler.java:43) ~[?:?]
    at org.bukkit.craftbukkit.v1_16_R2.scheduler.CraftTask.run(CraftTask.java:99) ~[patched_1.16.2.jar:git-Paper-189]
    at org.bukkit.craftbukkit.v1_16_R2.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54) ~[patched_1.16.2.jar:git-Paper-189]
    at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[patched_1.16.2.jar:git-Paper-189]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_272]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_272]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_272]
  3. mfnalex
    mfnalex
    5/5,
    Version: v5.1.0
    Awesome plugin and VERY nice developer, quickly added support for another plugin so that both work together perfectly :)
    1. RockinChaos
      Author's Response
      Thanks for the friendly review! I am happy that I could add support for your awesome plugin :)
  4. danil20028191
    danil20028191
    4/5,
    Version: v5.1.0
    Hi. I am using the latest build of ItemJoin on PaperSpigot 1.16.4. Works great, but hide-attributes item-flag not works. Player can see the enchantments.
  5. nikitushu
    nikitushu
    5/5,
    Version: v5.1.0
    Great plugin with one of the best support in the whole spigot community!
    In-game GUI is a masterpiece, extra attention to details was paid. I definitely recommend this plugin!
    1. RockinChaos
      Author's Response
      Thank you for the fantastic review, I really appreciate your kind words!
      I am happy that you had a good experience.
  6. Anarchist_YT
    Anarchist_YT
    5/5,
    Version: v5.1.0
    Excellent plugin, unlimited staff and cool support!You can add a lot of items with unlimited functional and animations, high recommend it!
    1. RockinChaos
      Author's Response
      Thank you for the awesome review!
      I am glad that you had a great support experience :)
  7. Ceqola
    Ceqola
    5/5,
    Version: v5.1.0
    Absolutely incredible plugin! Downloaded it to create simple items for when you join, and it had so much more to offer. Love it so much.

    One request I have- it would be awesome if it was possible to put a custom item (that you create in ItemJoin) for other items' recipes. This would open up a whole lot of possibilities.
    1. RockinChaos
      Author's Response
  8. zlAquiles_
    zlAquiles_
    5/5,
    Version: v5.1.0
    Good plugin congratulations!
    by the way I have a question, I want to know if I can break the item if the slot is busy, thanks!
    1. RockinChaos
      Author's Response
      Thanks for the great review!

      In regards to your question, I am unsure what you mean by "break" it's possible you mean overwrite? You can test this via the items.yml and setting items-Overwrite to true.

      If you need additional help you can feel free to join our discord server!
  9. hniV
    hniV
    5/5,
    Version: v5.1.0
    Not much to say ...
    Plugin is working excellent, the author is very friendly
    I'm just wandering around and forget to give you a 5-star, so sorry
    Re: At the right time, I get support INSTANTLY by the author himself
    1. RockinChaos
      Author's Response
      Thank you for taking the time to leave a review! I really appreciate your kind words and I am happy that you had a good experience :)
  10. momoservertw
    momoservertw
    5/5,
    Version: v5.1.0
    The new version is amazing.
    Thank you for adding all the features I described in GitHub.

    ItemJoin can not only provide players with menu items, but also create various custom items to reward or execute commands.
    No bugs and very powerful. In addition, the author is super nice. : )
    1. RockinChaos
      Author's Response
      Thank you for the amazing review, I really appreciate your kind words and I am happy that I could add the features you requested.