-
Notifications
You must be signed in to change notification settings - Fork 15
Developer API
This page is incomplete and out of date.
If you're familiar with Maven, you'll be able to automatically download EchoPet as a dependency using the following setup.
<repositories>
<repository>
<id>echopet-repo</id>
<url>http://repo.dsh105.com/</url>
</repository>
<!-- And so on... -->
</repositories><dependencies>
<dependency>
<groupId>com.dsh105<groupId>
<artifactId>EchoPet</artifactId>
<version>2.3.3</version>
</dependency>
<!-- And so on... -->
</dependencies>Note: Change the version to whatever you require (even if it is a snapshot build! ;D).
If you don't use Maven, include it as a dependency in your IDE.
The EchoPet Developer API can be accessed used the following method.
import io.github.dsh105.echopet.api.EchoPetAPI
public EchoPetAPI getEchoPetAPI() {
return EchoPetAPI.getAPI();
}import io.github.dsh105.echopet.EchoPet
import io.github.dsh105.echopet.api.EchoPetAPI
public EchoPetAPI getEchoPetAPI() {
Plugin plugin = this.getServer().getPluginManager().getPlugin("EchoPet");
if (plugin == null || !(plugin instanceof EchoPet)) {
return null;
}
return ((EchoPet) plugin).getAPI();
}The EchoPet Developer API allows developers access to a wide range of utilities that can be used to control Pets initiated using the plugin. It also allows control over the Pet AI System and Target Selection.
List Of Methods
| Method Name | Description/Function |
|---|---|
| givePet(Player.class, PetType.class, Boolean.class) | Gives a Pet to the specified player. If the third parameter is true, the player will also be notified of their new Pet. |
| removePet(Player.class, Boolean.class | Removes any Pet a player has. |
| hasPet(Player.class) | Checks whether a Player has a Pet. Returns a boolean value depending on the result. |
| getPet(Player.class) | Gets a Player's Pet. Will return null if the Player does not have a Pet. |
| getAllPets() | Returns an Array of all active Pets. |
| teleportPet(Pet.class, Location.class) | Teleport's a Pet to a certain Location. The Pet's owner can be retrieved using pet.getOwner() |
| addData(Pet.class, PetData.class) | Applies/adds the specified data to a Pet. |
| removeData(Pet.class, PetData.class) | Removes/deactivates a data option for a Pet. |
| hasData(Pet.class, PetData.class) | Checks whether a Pet has a data option enabled. |
| setAttackTarget(Pet.class, LivingEntity.class) | Sets a Pet's target to the specified LivingEntity. Note that if the Attack Goal has not been added to the Pet's AI, this will not work. |
| getAttackTarget(Pet.class) | Gets the current Attack Target of a Pet. Will return null if the Pet does not have an Attack Target. |
| addGoal(Pet.class, GoalType.class) | Adds a predefined Goal to a Pet's AI. Usage example: addGoal(petInstance, GoalType.ATTACK);
|
| addGoal(Pet.class, PetGoal.class, String.class) | Adds an extension of PetGoal.class to a Pet's AI. A tutorial on this can be found below. |
| removeGoal(Pet.class, GoalType.class) | Removes a predefined Goal from a Pet's AI. Usage example: removeGoal(petInstance, GoalType.ATTACK);
|
| removeGoal(Pet.class, String.class) | Removes a Goal from a Pet's AI by it's Identifier |
| removeGoal(Pet.class, PetGoal.class) | Removes a Goal instance from a Pet's AI |
Referenced Classes:
- Player.class: Player object from the Bukkit API
- PetType.class: API Enumeration, representing all available Pet Types (com.github.dsh105.echopet.data.PetData)
- Pet.class: Represents a Pet object (com.github.dsh105.echopet.entity.pet.Pet)
- Location.class: Location object from the Bukkit API
-
PetData.class: API Enumeration of all valid Data options for all Pets. Note that only some data types may be applied to certain Pets. Use
pet.getPetType()(com.github.dsh105.echopet.data.PetType) to check Entity Types - LivingEntity.class: Represents a Living Entity (org.bukkit.entity.LivingEntity)
- GoalType.class: API Enumeration of already included Goals to add to a Pet's AI
- PetGoal.class: API Super class representing all PetGoals. A tutorial for extending this can be found below.
| Event Name | Function |
|---|---|
| PetAttackEvent | Called when a Pet attempts to damage a target. Cancelling this event will not cancel the animation, only the damage dealt. |
| PetDamageEvent | Called when a Pet is damaged. |
| PetInteractEvent | Called when a Player interacts (right or left click) with a Pet. |
| PetMenuOpenEvent | Called when a Pet's Owner opens the PetMenu for their Pet. |
| PetMoveEvent | Called when a Pet moves while following it's Owner or riding. |
| PetRideJumpEvent | Called when a Player attempts to jump while riding their Pet. |
| PetRideMoveEvent | Called when a Player moves while riding their Pet. |
| PetSpawnEvent | Called when a Pet spawns. |
| PetTeleportEvent | Called when a Pet teleports. |
Custom AI Goals can be created and applied to Pets through the Developer API. For this tutorial, a simple goal (floating in water) is used.
First, create a class that extends PetGoal.
import com.github.dsh105.echopet.entity.pathfinder.PetGoal;
public class PetGoalFloat extends PetGoal {
private EntityPet pet;
public PetGoalFloat(EntityPet pet) {
this.pet = pet;
}
}There are five important methods that can be accessed inside this class now:
- shouldStart() - Called to check whether the method should start. Use this to return true if it is to start, false if not.
- shouldFinish() - Called to check whether the method should finish running. Use this to return true if it is to finish, false if not.
- start() - Called when the Goal starts executing.
- finish() - Called when the Goal finished executing.
- tick() - Called every tick if the Goal has started.
In this example, it checks if the Pet is currently in water, and keeps it floating if it is.
@Override
public boolean shouldStart() {
return pet.world.getMaterial((int) pet.locX, (int) pet.locY, (int) pet.locZ).isLiquid();
}
@Override
public boolean tick() {
if (pet.aC().nextFloat() < 0.8F) {
this.pet.getControllerJump().a();
}
}The final class looks like this:
import com.github.dsh105.echopet.entity.pathfinder.PetGoal;
public class PetGoalFloat extends PetGoal {
private EntityPet pet;
public PetGoalFloat(EntityPet pet) {
this.pet = pet;
}
@Override
public boolean shouldStart() {
return pet.world.getMaterial((int) pet.locX, (int) pet.locY, (int) pet.locZ).isLiquid();
}
@Override
public boolean tick() {
if (pet.aC().nextFloat() < 0.8F) {
this.pet.getControllerJump().a();
}
}
}Feel like you can make SonarPet better? Got something awesome to contribute? We're always looking for help! Feel free to place a fork in this repository and submit a pull request!
Live Chat
Got something to share? Or just want to talk with the creators of EchoPet? Come join us in IRC - #techcable @ irc.spi.gt