Compare this to our original, very simple HelloWorld.java file. Notice right at the
top, the package statement and later the public class statement now each refer
to SkyCmd instead of HelloWorld .
Let's take a closer look at how a plugin handles a chat command like /sky .
Handle Chat Commands
The bit with the @Command at ❶ tells the system that this function, skyCommand ,
is responsible for handling the /sky command. That is, when the player types
the /sky command, your skyCommand function will be called.
The first thing we need to check is a little awkward; it turns out that the
MessageReceiver that gets passed to us here may not be a Player . It could be a
Player object, or who knows what else. We want to make sure it's really a Player ,
so we'll check for that explicitly at ❷ , using the Java keyword instanceof . This
tests to see if the thing passed in is really a Player . If it is, then we're going to
do the bulk of the command starting at ❸ . (If it's not a Player , then it's probably
a console command, if you want to allow those.)
The skyCommand function begins with another bit of magic, just like we saw
with parent/child recipes at the end of Chapter 5, Plugins Have Objects , on
page 67 . Now that we've confirmed the variable caller is really of type Player (not
just a MessageReceiver or any other parent or child), we can convert it to the
type Player , using a cast operator.
So the expression (Player)caller returns the variable caller , converted with a cast
operator to the type Player so you can assign it to the variable me . It sounds
messy, and it is a bit, but it's also something you can just copy and paste,
as we'll be using this little recipe in almost every command plugin to get a
Now that we have a real Player object referenced by me , we can get the list of
all living entities with me.getWorld().getEntityLivingList() , which will get us all the
living entities in this world and return them in a List that we'll go through with
a for loop.
We'll go over the details of lists in the next chapter, but first we'll look at how
Location objects work. In this case, we're setting the variable target to each entry
in the list of entities as we go through the for loop. If the target is not a fellow
player, then we want to fling it skyward, which we do by changing its location
with a teleportTo() .