Skip to content

Selection System

Faizaan edited this page Jan 6, 2017 · 2 revisions

Prison-Core has a selection system similar to the WorldEdit wand system. Players can select a region using a certain tool, and you can access this region for your own use. This guide will detail how to use this simple yet effective built-in system.

The selection tool

In order for player selections to be recognized by the plugin, the player must use a certain tool. This ItemStack is stored in the global variable SelectionManager.SELECTION_TOOL. Alternatively, you could use the convenient bestowSelectionTool() method:

Prison.get().getSelectionManager().bestowSelectionTool(myPlayer);
myPlayer.sendMessage("Left-click to select position 1, and right-click to select position 2.");

The player can then left-click to select one corner, and right-click to select the other.

Retrieving a selection

Selection data is stored in a Selection instance. To retrieve the Selection instance of a player, call the following method:

Selection selection = Prison.get().getSelectionManager().getSelection(myPlayer);

To the selection system, every player has a selection that is either complete or incomplete. As a result, this method will never return null.

So, you may ask, how do I know if the selection is complete? Answer: simply by asking it!

Selection selection = Prison.get().getSelectionManager().getSelection(myPlayer);
if(!selection.isComplete()) {
    Output.get().sendError(myPlayer, "You must make a selection first!");
    return;
}

Selection to Bounds

Prison comes with a Bounds utility class, which contains a variety of useful methods that calculate things related to the area between two Locations. Among these methods are a within(Location) method, which checks if a location is within the boundaries, and methods for calculating the width, height, and depth of the boundaries.

You can easily turn a Selection into a Bounds object by calling Selection.asBounds().

Selection selection = Prison.get().getSelectionManager().getSelection(myPlayer);
if(!selection.isComplete()) {
    Output.get().sendError(myPlayer, "You must make a selection first!");
    return;
}

Bounds bounds = selection.asBounds();
if(bounds.within(myPlayer.getLocation()) {
   Output.get().sendWarn(myPlayer, "You are within the boundaries!");
}

That's all you need to know to use the built-in selection system! It's a very simple yet very useful system that will hopefully make your life a little bit easier.