api/Ships 5

This API is not fully released, there maybe API you need that is in Ships 5 that isnt on this page.

Version: Ships 5.0.1.3

Basics

Getting a Vessel

getting a Vessel could not be any simpler. Get the vessel by 'Ships sign,' block or name of the vessel.

import MoseShips.StillShips.Vessel.Vessel;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;

Vessel vessel = Vessel.getVessel(String name);
//rescanning is much slower but it gets the latest update, if rescan is now set to true, then it will check the vessels structures for the block (much quicker and less stress on the server)
Vessel vessel = Vessel.getVessel(Block block, boolean rescan);
Vessel vessel = Vessel.getVessel(Sign sign);

getting a VesselType

there are a few ways to get a vesselType as shown below.

import MoseShips.ShipTypes.VesselType;
import MoseShips.StillShip.Vessel.Vessel;

//This way will come with the changed variables (such as speed) 
Vessel vessel;
VesselType type = vessel.getVesselType();

//This way is the way to get a default type with all default variables.
//replace AIRSHIP with the vesseltype you wish 
VesselType type = VesselTypes.AIRSHIP.get().clone();

//This way is the way to get custom vessel type (that should have defaults), this method also gets normal vessels
VesselType type = VesselType.getTypeByName("vesselName").clone();

//then there are these ways
//get all the vesseltypes that are not custom
VesselType[] types = VesselTypes.values();

//get all the vesseltypes that are custom
List<VesselType> types = VesselType.customValues();

//gets all the vesseltypes
List<VesselType> types = values();

display all the info to a player

This is a very simple thing but should not be missed

vessel.displayInfo(Player player);

getting the Ships size

getting the total amount of blocks is below, but here is some other methods you could use that might help

vessel.getHeight(boolean updateStructure);  //this is Y axis
vessel.getWidth(boolean updateStructure); //this is Z axis
vessel.getLength(boolean updateStructure); //this is X axis

getting the ships blocks

With ships 5 blocks are broken down into three sections. Priority, Special and standard, these groups are used inside Ships 5 to move the vessel but this should not matter to you.

Vessel vessel;
List<Block> blocks = vessel.getStructure().getAllBlocks();

//If you wish to get the moving blocks of the structure here is how (vessel must be moving/sub moving)

Structure structure = vessel.getStruture();
If (structure instanceof MovingStructure){
    MovingStructure stru = structure;
    stru.getAllMovingBlocks();
}

Moving a vessel

This is a little tricky at times because the move method uses a engm called MovementMethod that moves the vessel forward, backward, left, right, rotate left, rotate right, up and down. meaning you need to know the direction the vessel is facing. luckily there is a easy way to do it.

Vessel vessel;
BlockFace vesseldirection = vessel.getFacingDirection();

//MovementMethod = the direction of the ships movement
//speed = amount of blocks the vessel moves in the chosen motion (if rotating, the speed should be set to 0)
//player = the player who receives all the messages
vessel.safeMove(MovementMethod method, int speed, @Nullable OfflinePlayer player);

//i may work on a move method that uses BlockFace instead of MovementMethod, but your stuck with one option so far

If you wish the vessel to move towards a location, you now can

vessel.syncSafelyMoveTowardsLocation(Location loc, int speed, @Nullable OfflinePlayer player);

If you wish to move the vessel to a new location without the steps inbetween, try teleporting the vessel

//the location will be the licence signs new location
vessel.forceTeleport(Location loc);

//this version is not forced so it will check if the location is safe to teleport to
vessel.teleportVessel(Location loc, @Nullable OfflinePlayer player)

Removing a vessel

//assuming you already have the vessel as a variable
vessel.remove();

Events

all events are cancel-able

Create Vessel

You can get the following from this event

  • Player (player who created the vessel. AKA owner)
  • Sign (The vessels licence sign. The sign will be blank)
  • MovingVessel (The vessel that was created)
@EventHandler
public static void createVessel(ShipCreateEvent event){
}

About to move

This is not triggered if the trigger to move the vessel is forceMove() or forceTeleport()

you can get the following from the event

  • Player (the player who triggered the vessel to move - can be null)
  • Vessel (the moving vessel)
  • MovementMethod (the movement the vessel is making)
  • OfflinePlayer (the player who triggered the vessel to move - can be null)
@EventHandler
public static void shipAboutToMove(ShipAboutToMoveEvent event){
}

Move Vessel

This is not triggered if the trigger to move the vessel is forceMove() or forceTeleport()

you can get the following from the event

  • Player (the player who triggered the vessel to move - can be null)
  • Vessel (the moving vessel)
  • MovementMethod (the movement the vessel is making)
  • MovingStructure (the vessels moving structure)
  • OfflinePlayer (the player who triggered the vessel to move - can be null)
@EventHandler
public static void shipMove(ShipMovingEvent event){
}

Ship finished moving event

This event IS triggered when the vessel is moving in may means including forced.

you can get the following from the event

  • Vessel (the target vessel)

Ships Sign Creation

You can get the following from this event

  • JavaPlugin (this plugin that called the event)
  • Player (the player who created the sign)
  • String[] (The text that the sign has on it)
  • String[] (The text the user typed on the sign)
  • String[] (The text that will end up on the sign after the event is finished)
  • Sign (The sign the user placed)
public static void ShipsSignCreation(ShipsSignCreation event){
}

Vessel attempt to load

This is fired when a Vessel is attempting to load (as in converting from a file to a Vessel object)

what you can get from the event

  • File (the vessels file it is trying to read)
@EventHandler
public static void onVesselLoad(VesselAttemptToLoadEvent event){
}

Advanced

Creating your own Ships command

public class className extends CommandLauncher{
        //extend CommandLauncher
	public className() {
		super("<command Name>", "<command arguments>", "<description>", "<permission - null if no permission required>", boolean player command, boolean console command);
	}

	@Override
	public void playerCommand(Player player, String[] args) {
            //add your player code here. Note, this will only be ran if the command is yours, therefore you dont need to bother checking if the command is your
	}

	@Override
	public void consoleCommand(ConsoleCommandSender sender, String[] args) {
	    //same as player command only for console
	}
}

once you have done that all you need to do is have the following 1 line of code

    new className();

Creating your own VesselType

Ships 5 allows you to create your own vessel types with its own rules

try some of these implementations, Ships uses these to display more info when a user is getting info of the vessel.

public class example implements Fuel, RequiredMaterial, Cell, ClassicVessel{

if you get confused, take a look at the github page for these vessels for inspiration.

public class Example extends VesselType{

	public Example() {
                //Sets some of the default values
		super(String name, ArrayList<Material> movein, int speed, int boost, boolean isAutoPilot);
	}

	@Override
	public boolean checkRequirements(MovableVessel vessel, MovementMethod move, List<MovingBlock> blocks, Player player) {
		// put the requirements for the vessel here, if it returns false then the vessel will not move.
		return false;
	}

	@Override
	public boolean shouldFall(ProtectedVessel vessel) {
		// In later versions of Ships, Vessels will fall, it will call this method if Ships thinks it should fall, return false if you wish to cancel the fall
		return false;
	}

	@Override
	public File getTypeFile() {
		// the file location of the config for your vessel type
		return null;
	}

	@Override
	public VesselType clone() {
		//this will create a exact copy of this vesselType. This will stop multiple vessels changing data when only 1 should change
		return null;
	}

	@Override
	public void loadVesselFromFiveFile(ProtectedVessel vessel, File file) {
		// This loads the vessel from a data file
		
	}

	@Override
	public void createConfig() {
		// This will create the config for your vesselType
		
	}

	@Override
	public void loadDefault() {
		// This loads the default data for your vesselType
		
	}

	@Override
	public void save(ProtectedVessel vessel) {
		// This creates a vesselData file under your vesseltype
		
	}
}

Comments

Posts Quoted:
Reply
Clear All Quotes