Inactive [MISC] CommandHelper [3.2.0] - Repeat commands! Aliases! Advanced command scripting! [1000]

Discussion in 'Inactive/Unsupported Plugins' started by sk89q, Feb 16, 2011.

  1. Offline

    sk89q

    CommandHelper is a utility plugin for working with commands.

    • Build your own commands without knowing Java or having to make a plugin
    • Repeat your last command with /.
    • Per-player command aliases
    • Global command aliases
    [​IMG]

    [​IMG] CommandHelper 3.2.0

    [​IMG] Requirements: Java 1.6+ required. Mac OS X users may have to update their Java version. In addition, you need "WorldEdit," but the download linked above has a version with WorldEdit already bundled.

    [​IMG]

    [​IMG]
     
    Pinoyskii, DHLF, beleg and 6 others like this.
  2. Offline

    Connor Griffin

    Optional variables are broken right now, so it sees all of your variables as required.
     
  3. Offline

    wraithguard01

    If you feel like living on the absolute bleeding edge, it's fixed in the dev build (that I *think* is mostly stable). Note that this doesn't have a warranty though. http://build.sk89q.com/job/CommandHelper/
     
  4. Offline

    Simon Welker

    Will test and report if I experience any crashes or issues! Thanks a lot for your quick reaction!

    Works like a charm by now. Awesome stuff, I love this command now :D

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 9, 2016
  5. Offline

    Timberman

    I want to create a cmd that allow a player to protect an area by themself with one single cmd.

    If he types /protect, it shall create a worldguard region X-X blocks arround the player, but it musn't do this, if the new region will overlap another region...

    Is it possible to check, if theres already a region in this area???

    Regards, Timber
     
  6. Offline

    MG127

    would be better to recieve the name of the region you are standing in to make an automatic set-parent

    thx wraithguard01, all alias are working again
     
  7. Offline

    obscurehero

    For all those wishing to simplify promotion/demotion without having to install a new plugin like permissionsplus. I've written a script for CommandHelper to create a '/promote' alias. I'm rather proud of it. You'll need to give your admin's access to the following permissions nodes:
    • ch.alias.safe
    • permissions.promote.<track>
    • permissions.demote.<track>
    You'll also need to get CommandHelper. Follow the instructions there. I don't think this would work with the newly implemented bukkit alias'.

    My really basic code:
    Show Spoiler

    Code:
    #Promoting a user
    safe:/promote $player [$world=''] [$group=''] [$track='<trackname>'] = >>>
            #Gets who is running the command
            assign(@promoter, player())
            #Assign all players to array
            assign(@ap, all_players())
            #check if player is online
            if(array_contains(@ap, $player), assign(@isonline, 1), assign(@isonline, 0))
            #Sets World
            if(equals(@isonline, 1),
                if(equals($world, ''), assign(@inworld, pinfo($player, 7)), assign(@inworld, $world)),
                if(equals($world, ''), die('no world specified'), assign(@inworld, $world))
            )
            #Sets Group
            if(equals(@isonline, 1),
                if(equals($group, ''), assign(@ingroup, array_get(pinfo($player, 9), 0)), assign(@ingroup, $group)),
                if(equals($group, ''), die('no group specified'), assign(@ingroup, $group))
            )
            run(sconcat('/pr', $player, 'promote', concat('t:', $track), @ingroup, @inworld))
            #Tell the player they were promoted
            tmsg($player, concat(color('RED'), sconcat('You have been promoted from the', @ingroup, 'group, in', @inworld, 'by', @promoter)))
    <<<      


    Obviously, this will go in your config.txt in your commandhelper folder. You'll also have to tweak it minorly (in obvious ways) to make a demote alias as well. Basically the code should allow you to promote the user you want in the world he's already in by just typing '/promote <username>' less arguments to remember! It still allows you to change the group of an offline player, but you'll need to enter more arguments in...basically making about as difficult as if you had just typed the original command to begin with.

    Maybe its easier to just download permissionsplus, but I've convinced myself that I've found a more elegant way...lol. ALSO, if someone wants to improve this script, I'd appreciate it. I haven't taken any programming in about +10 years so I'm a bit rusty.
     
  8. Offline

    Simon Welker

    Isn't WorldGuard checking this automatically? I'm working with Residence, so I don't really know... Residence does. To select 16x128x16 with WorldEdit, I would just use //chunk. But I also don't know if WorldGuard selections are separated from WE selections (this is the case with Residence u_u)
     
  9. Offline

    ray0911

    Code:
    /pppp $player = >>>
    try(
    msg(array_get(pgroup($player), 0))
    , @ex,
    if(equals(array_get(@ex, 0), PlayerOfflineException)
    , die('Player not online')
    , die('Player online')
    )
    , array(PlayerOfflineException))
    #Other code added below here later
    <<<
    Can anyone help me with this little piece of code? Cann't see to get it working. Keep getting error message "Unable to run command, script not yet complied,or a complier error occured for that command." TY!

    WOW I fixed it! I needed 3.1.2. Nevermind!
    http://build.sk89q.com/job/CommandH...ifact/target/commandhelper-3.1.2-SNAPSHOT.jar
     
  10. Offline

    Timberman

    Hmmm i will check this :) THX

    Ist it possible to fetch the output of the run command?
     
  11. Offline

    wraithguard01

    Unfortunately, I don't think this is possible right this second. You could have a player create a region, but there's no way to check to see what the current region is, that I can think of, anyways. I plan to add functions to hook into WE/WG though very soon, and after that it will be possible.
    Unfortunately not at this time. There's no guarantee that the output from any given plugin is actually related to the command that was just run, further, you'd have to do some really hacky stuff to get that output anyways. Due to this being a severe issue, I'm not sure if that feature will be added any time soon. There would likely have to be some fundamental changes in bukkit itself, and even that wouldn't strictly make this possible. For instance, a command could trigger a new thread, and 5 minutes later, after that long running thread finishes, it finally outputs something. In such a case, it just wouldn't be possible to get that output.
     
  12. Offline

    obscurehero

    Updated the permissions code:

    Show Spoiler
    Code:
    #Enables easy group changing for Permissions
    #Quick and Easy Commands for Admins
    #Getting World Groups
    #/pr -list groups <world>
    safe:/groups [$world=''] = >>>
            #Gets who is running the command
            assign(@player, player())
            #Sets World
            if(equals($world, ''), assign(@inworld, pinfo(@player, 7)), assign(@inworld, $world))
            #Runs command
            run(sconcat('/pr', '-list', 'groups', @inworld))
    <<<
    #Setting User Group
    #/pr <user> (w:<world>) parents add <group>
    safe:/setgroup $player $group [$world=''] [$currentgroup=''] = >>>
            #Gets who is running the command
            assign(@promoter, player())
            #Assign all players to array
            assign(@ap, all_players())
            #check if player is online
            if(array_contains(@ap, $player), assign(@isonline, 1), assign(@isonline, 0))
            #Sets World
            if(equals(@isonline, 1),
                if(equals($world, ''), assign(@inworld, pinfo($player, 7)), assign(@inworld, $world)),
                if(equals($world, ''), die('no world specified'), assign(@inworld, $world))
            )
            #Gets Current Group
            if(equals(@isonline, 1),
                if(equals($currentgroup, ''), assign(@ingroup, array_get(pinfo($player, 9), 0)), assign(@ingroup, $currentgroup)),
                if(equals($currentgroup, ''), die('player is not online - current group not specified'), assign(@ingroup, $currentgroup))
            )
            run(sconcat('/pr', $player, concat('w:', @inworld), 'parents', 'add', $group))
            run(sconcat('/pr', $player, concat('w:', @inworld), 'parents', 'remove', @ingroup))
            #Tell the player their group was changed
            tmsg($player, concat(color('RED'), sconcat(@promoter, 'has changed your group to', concat(color('BLUE'), $group))))\
            #Reloads that world's permissions
            /pr -reload @inworld \
            if(equals(@isonline, 1),
                msg(concat(color('RED'), sconcat($player, 'is now a part of the', concat(color('BLUE'), array_get(pinfo($player, 9), 0)), concat(color('RED'), 'group in'), concat(color('AQUA'), @inworld)))),
                die('player offline')
            )
    <<<
    #Promoting a user
    safe:/promote $player [$world=''] [$group=''] [$track='AdminTrack'] = >>>
            #Gets who is running the command
            assign(@promoter, player())
            #Assign all players to array
            assign(@ap, all_players())
            #check if player is online
            if(array_contains(@ap, $player), assign(@isonline, 1), assign(@isonline, 0))
            #Sets World
            if(equals(@isonline, 1),
                if(equals($world, ''), assign(@inworld, pinfo($player, 7)), assign(@inworld, $world)),
                if(equals($world, ''), die('no world specified'), assign(@inworld, $world))
            )
            #Sets Group
            if(equals(@isonline, 1),
                if(equals($group, ''), assign(@ingroup, array_get(pinfo($player, 9), 0)), assign(@ingroup, $group)),
                if(equals($group, ''), die('no group specified'), assign(@ingroup, $group))
            )
            run(sconcat('/pr', $player, concat('w:', @inworld),'promote', concat('t:', $track), @ingroup, @inworld))\
            #Reloads that world's permissions
            /pr -reload @inworld \
            if(equals(@isonline, 1),
                msg(concat(color('RED'), sconcat($player, 'is now a part of the', concat(color('BLUE'), array_get(pinfo($player, 9), 0)), concat(color('RED'), 'group in'), concat(color('AQUA'), @inworld)))),
                die('player offline')
            )
            #Tell the player they were promoted
            tmsg($player, concat(color('RED'), sconcat(@promoter, 'has promoted you from', concat(color('BLUE'), @ingroup), concat(color('RED'), 'to'), concat(color('BLUE'), array_get(pinfo($player, 9), 0)))))
    <<<
    #Demoting Users
    safe:/demote $player [$world=''] [$group=''] [$track='MainTrack'] = >>>
            #Gets who is running the command
            assign(@demoter, player())
            #Assign all players to array
            assign(@ap, all_players())
            #check if player is online
            if(array_contains(@ap, $player), assign(@isonline, 1), assign(@isonline, 0))
            #Sets World
            if(equals(@isonline, 1),
                if(equals($world, ''), assign(@inworld, pinfo($player, 7)), assign(@inworld, $world)),
                if(equals($world, ''), die('no world specified'), assign(@inworld, $world))
            )
            #Sets Group
            if(equals(@isonline, 1),
                if(equals($group, ''), assign(@ingroup, array_get(pinfo($player, 9), 0)), assign(@ingroup, $group)),
                if(equals($group, ''), die('no group specified'), assign(@ingroup, $group))
            )
            run(sconcat('/pr', $player, concat('w:', @inworld),'demote', concat('t:', $track), @ingroup, @inworld))\
            #Reloads that world's permissions
            /pr -reload @inworld \
            if(equals(@isonline, 1),
                msg(concat(color('RED'), sconcat($player, 'is now a part of the', concat(color('BLUE'), array_get(pinfo($player, 9), 0)), concat(color('RED'), 'group in'), concat(color('AQUA'), @inworld)))),
                die('player offline')
            )
            #Tell the player they were promoted
            tmsg($player, concat(color('RED'), sconcat(@demoter, 'has demoted you from', concat(color('BLUE'), @ingroup), concat(color('RED'), 'to'), concat(color('BLUE'), array_get(pinfo($player, 9), 0)))))
    <<<        
     
  13. Offline

    Scizzr

    Here's a useful starting script for people with multiple groups and who want only certain groups (+inheriting?) to use a command. I warn you, it's a bit difficult to read; I'm still learning how to use this language better. However, I hope at least one person can get something out of this.

    Pretty much, I made this script for users to use the command '/clog' to clear their chat log. This could EASILY be modified to do something different (such as more than just clearing the chat log) or have different commands or introduce parameter handling (with parse_args($) and some fancy verification), and editing the groups array to allow different groups to use a command is fairly simple.

    I have included several versions of my code for those of you whose personal preferences I do not know. Like I said, you can edit this to your liking.

    This is my original code, which allows for easily editing the minimum group and what it does.
    I keep it this way so I can pretty much just copy, paste, and edit it
    Code:
    safe:/clog [$=''] = >>>
        assign(@mingroup,'trusted')
          g(assign(@groups,array(array('guest','builder','trusted','moderator','admin'),array(array('guest'),array('guest','builder'),array('guest','builder','trusted'),array('guest','builder','trusted','moderator'),array('guest','builder','trusted','moderator','admin')))),assign(@colors,array('&7','&3','&6','&2','&c')),g(assign(@size,array_size(@groups[0])),assign(@mygroups,pgroup()),assign(@mygroup,to_lower(@mygroups[0]))),for(assign(@index,0),lt(@index,@size),inc(@index),if(equals(@groups[0][@index],@mygroup),if(not(array_contains(@groups[1][@index],@mingroup)),g(assign(@groupname,concat(to_upper(substr(@mingroup,0,1)),substr(@mingroup,1,length(@mingroup)))),assign(@groupname,concat(@colors[@index],@groupname)),msg(replace(concat('&4[Error]&f  You need to be ',@groupname,'&f to use this  command.'),'&','§'))),g(
            assign(@i,1),
            for(@i,lte(@i,20),assign(@i,add(@i,1)),msg(''))
        )))))
    <<<
    

    This is my code, compacted into a single line (minimal space usage)
    Code:
    safe:/clog [$=''] = g(assign(@mingroup,'guest'),g(assign(@groups,array(array('guest','builder','trusted','moderator','admin'),array(array('guest'),array('guest','builder'),array('guest','builder','trusted'),array('guest','builder','trusted','moderator'),array('guest','builder','trusted','moderator','admin')))),assign(@colors,array('&7','&3','&6','&2','&c')),g(assign(@size,array_size(@groups[0])),assign(@mygroups,pgroup()),assign(@mygroup,to_lower(@mygroups[0]))),for(assign(@index,0),lt(@index,@size),inc(@index),if(equals(@groups[0][@index],@mygroup),if(not(array_contains(@groups[1][@index],@mingroup)),g(assign(@groupname,concat(to_upper(substr(@mingroup,0,1)),substr(@mingroup,1,length(@mingroup)))),assign(@groupname,concat(@colors[@index],@groupname)),msg(replace(concat('&4[Error]&f You need to be ',@groupname,'&f to use this command.'),'&','§'))),g(assign(@i,1),for(@i,lte(@i,20),assign(@i,add(@i,1)),msg(''))))))))
    

    This is my code, documented with notes, ideas, and advice
    Code:
    safe:/clog [$=''] = >>>
    ## This is the variable that lets the script know what group the user must be
    ## My script actually counts higher groups as inheriting the group permissions,
    ## so you may want to change it to instead have an array of groups that are
    ## allowed to use this command (such as allowing both Guest and Trusted, but
    ## not Builder access to a command)
        assign(@mingroup,'guest')
        assign(@groups,
    ## This is the array you would edit to add/remove/rename groups
            array(
                array('guest','builder','trusted','moderator','admin'),
                array(
                    array('guest'),
                    array('guest','builder'),
                    array('guest','builder','trusted'),
                    array('guest','builder','trusted','moderator'),
                    array('guest','builder','trusted','moderator','admin')
                )
            )
        )
    ## This is the array you would edit to change the display color of a group
        assign(@colors,array('&7','&3','&6','&2','&c'))
        assign(@size,array_size(@groups[0]))
        assign(@mygroups,pgroup())
        assign(@mygroup,to_lower(@mygroups[0]))
        for(assign(@index,0),lt(@index,@size),inc(@index),
            if(equals(@groups[0][@index],@mygroup),
                if(not(array_contains(@groups[1][@index],@mingroup)),
                    assign(@groupname,concat(to_upper(substr(@mingroup,0,1)),substr(@mingroup,1,length(@mingroup))))
                    assign(@groupname,concat(@colors[@index],@groupname))
    ## This is the error message that is shown when the user isn't allowed
                    msg(replace(concat('&4[Error]&f You need to be ',@groupname,'&f to use this command.'),'&','§')),
    ## These are the actions that are run when the user is allowed
                    assign(@i,1)
                    for(@i,lte(@i,20),assign(@i,add(@i,1)),msg(''))
    ## You could always add something like this to get some arguments
                   assign(@args,$)
    ## And do some 'limited' input validation
                   if(not(equals(array_size(@args),2)),
    ## If they give any number of arguments other than 2
                       die(replace(concat('&4[Error]&f You must give 2 arguments'),'&','§')),
    ## If they give the first argument but it is not a string
                       if(not(is_string(@args[0])),
                           die(replace(concat('&4[Error]&f Argument 1 must be a string'),'&','§')),
    ## If they give the second argument but it is not a number (integer)
                           if(not(is_integer(@args[1]),
                               die(replace(concat('&4[Error]&f Argument 2 must be a number'),'&','§')),
    ## If everything went well and all arguments are as expected
                               die(replace(concat('&2Args: &f[&e',@args[0],'&f], [&e',@args[1],'&f]'),'&','§'))
                           )
                       )
                   )
                )
            )
        )
    <<<
    

    I'll be looking forward to user-defined functions being added to this plugin's functionality. It would save a lot of space, time, and frustration. :eek:

    Nonetheless, thank you for an excellent plugin. It works very well. (3.1.2 included) :)
     
  14. Offline

    wraithguard01

    Version 3.1.2 is now released!

    Checkout the github download. (Alternate adf.ly download link on wiki. Thanks!)

    • Added exception handling, and fixed more bugs with command matching and optional variables.
    • Added functions: set_display_name, reset_display_name, try, array_index_exists,is_array, is_boolean, is_double, is_integer, is_null, is_string, substr, to_lower, to_upper, length, throw
    • Newlines are now handled in an expected manner in all functions. The escape sequence '\n' has been added, which allows for newlines to be embedded in a string in a script.
    • Command labels can now be used to specify what groups have permission to run this command
     
  15. Offline

    obscurehero

    What does this mean?

    Also - It seems like the new RB isn't working with CH (3.1.2). Can you confirm this? By not working, I mean with permissions. It isn't allowing access to restricted functions even with the full '*' permissions (let alone ch.alias.safe).
     
  16. Offline

    Pr4w

    Hey,

    What is the easiest way of timing commands ? Eg having a macro that does one thing, then waits for a few seconds, and then does something else ? :)
     
  17. Offline

    Connor Griffin

    Right now, this function doesn't exist in the scripting language used by CH. I believe the author has most of this function actually written out, and the sleep(), i.e., delay function, was actually in an older CH snapshot build, but it was buggy and needed more work, so it was pulled from subsequent releases.
     
  18. Offline

    Pr4w

    Oh, right, glad to know, thanks ! :)
    The only way I was picturing it without sleep() was a crazy while() loop, checking time difference between two variables, but that was just insane xD
     
  19. Offline

    wraithguard01

    This would suffer from the same problem that I was having with the sleep function; that would freeze your server up! I have to get multithreading working before I can implement sleep. I'm about 60% done getting it ready, but I'm going to concentrate on other, more requested features for the time being.

    Check the verbose changelog: http://wiki.sk89q.com/wiki/CommandHelper/Changelog#3.1.2 I haven't had time to integrate this into the main documentation yet. Also, what permissions provider are you using? Permissions seem to work fine for me.
     
  20. Offline

    Connor Griffin

    Any ideas on what you've prioritized for the next major release? I would love to see stuff like on_login(), on_click(left/right, item) and other event-based triggers. Console command handling would be awesome too. That's my two cents, you probably already have your own plans though.
     
  21. Offline

    obscurehero

    So cool!

    I'm using 3.1.6 and 3.1.3 commandhelper as 3.1.2 doesn't have support for optional variables in my experience. Mind you, my errors only crop up with the latest RB (1000). It seems to find issue with the color() function as well as some restricted functions even though I've been using "safe:". This strategy works well with 953 RB.
     
  22. Offline

    Connor Griffin

    3.1.6 and 3.1.3? Those builds don't exist...?
     
  23. Offline

    obscurehero

    permissions 3.1.6 and commmandhelper 3.1.2 DOES exist on github...I goof'd there saying 3.1.3 oops!
     
  24. Offline

    Connor Griffin

    Oh, I wasn't thinking of permissions when you said 3.1.6, sorry.
     
  25. Offline

    obscurehero

    No worries! :)

    Yeah, I can't seem to replicate it with 1000RB. If you have a spare sec I posted some of the CH code I'm using, so maybe I did something wrong there. I'm going to use this ^^ ASAP. I'm a bit excited about it. ;)
     
  26. Offline

    Simon Welker

    I'm using a command to tp to a certain location to reset it with WorldEdit, using /tp x,y,z and //pos1 & //pos2.

    /tp spleef = /tp 551.4,66,-251.4

    I can't use this command directly in my macro or it will start setting WorldEdit stuff where I don't want it because chunks won't be loaded until WorldEdit starts.
    But this command will give me:

    Too many arguments.
    /teleport [target] <destination>

    What's wrong with that? oô

    --EDIT--
    Man, really stupid thought error by myself. I got to use
    /tp spleef = /tp '551.4,66,-251.4'
    So CH won't interpret the commas as CH commas. :D
     
  27. Offline

    obscurehero

    You don't have a target?
    Maybe try...

    /spleef = sconcat(/tp, player(), concat(551.4,',',66,',',-251.4))

    CommandBook's /tp command requires that the x,y,z have zero spaces between them.
     
  28. Offline

    Simon Welker

    Haven't you seen that I already edited that in? Sorry :D

     
  29. Offline

    obscurehero

    :confused:

    You still don't have a target in your command as given...maybe the /tp assumes that the target is player() if one isn't given...
     
  30. Offline

    Simon Welker

    Nope. This is just to teleport an admin there to reset the arena. Normal players can't use that anyway. You got the use wrong a bit, I guess :)
     
  31. Offline

    beowulf

    Anybody know why this won't compile in my config.txt?

    shieldsafe:/sethome = >>>
    assign(@key, concat('home', '_', player(), '_', pworld()))
    store_value(@key, ploc(player()))
    assign(@msg, concat('§cHome has been set to ', ploc(player())), '!')
    msg(@msg)
    console(@msg)
    <<<

    This was actually working for several weeks, and then it broke. I have backups of the config.txt, and the macro definition did not change. Any idea what did? Thanks!

    I got this to work again by removing the console() call. But every time I run any CommandHelper Alias now, I am seeing this in server.log. Anybody know why?

    Code:
    java.io.InvalidClassException: com.laytonsmith.aliasengine.Constructs.Construct; local class incompatible: stream classdesc serialVersionUID = 7845685218218885669, local class serialVersionUID = 1
            at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
            at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
            at java.io.ObjectInputStream.readClassDesc(Unknown Source)
            at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
            at java.io.ObjectInputStream.readClassDesc(Unknown Source)
            at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
            at java.io.ObjectInputStream.readObject0(Unknown Source)
            at java.io.ObjectInputStream.readObject(Unknown Source)
            at java.util.HashMap.readObject(Unknown Source)
            at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
            at java.lang.reflect.Method.invoke(Unknown Source)
            at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
            at java.io.ObjectInputStream.readSerialData(Unknown Source)
            at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
            at java.io.ObjectInputStream.readObject0(Unknown Source)
            at java.io.ObjectInputStream.readObject(Unknown Source)
            at com.laytonsmith.PureUtilities.Persistance.load(Persistance.java:65)
            at com.laytonsmith.PureUtilities.Persistance.getValue(Persistance.java:163)
            at com.laytonsmith.PureUtilities.Persistance.getValue(Persistance.java:200)
            at com.laytonsmith.aliasengine.functions.Persistance$get_value.exec(Persistance.java:123)
            at com.laytonsmith.aliasengine.Script.eval(Script.java:267)
            at com.laytonsmith.aliasengine.Script.eval(Script.java:202)
            at com.laytonsmith.aliasengine.Script.run(Script.java:116)
            at com.laytonsmith.aliasengine.AliasCore.alias(AliasCore.java:88)
            at com.sk89q.commandhelper.CommandHelperListener.runAlias(CommandHelperListener.java:88)
            at com.sk89q.commandhelper.CommandHelperListener.onPlayerCommandPreprocess(CommandHelperListener.java:132)
            at org.bukkit.plugin.java.JavaPluginLoader$5.execute(JavaPluginLoader.java:272)
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:58)
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:332)
            at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:706)
            at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:677)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:670)
            at net.minecraft.server.Packet3Chat.a(Packet3Chat.java:33)
            at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:85)
            at net.minecraft.server.NetworkListenThread.a(SourceFile:105)
            at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:451)
            at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:361)
            at net.minecraft.server.ThreadServerApplication.run(SourceFile:422)
    
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 9, 2016

Share This Page