To use and implement the ComplexTurrets API just add the plugin jar file to the external dependencies of your project or import the file into your local maven repository.
Remember to also set depend or softdepend in your plugin.yml file!
Methods
The main class for the API is ComplexTurretsAPI. You can use this class whenever you want in your plugin.
// Returns all turrets owned by a player.ArrayList<PlayerTurret> turrets =ComplexTurretsAPI.getPlayerTurrets(Player player);// Return whether a player is allied to a turret or not. boolean allied =ComplexTurretsAPI.isAllyToTurret(Player player,PlayerTurret playerTurret);// Returns the turret at certain location.PlayerTurret turret =ComplexTurretsAPI.getTurretFromLocation(Location location);// Damages a turret.// The player is optional and used to show an actionbar message.ComplexTurretsAPI.damageTurret(PlayerTurret playerTurret,int damage,Player player)
Events
// Event called when a player tries to place a turret. // ct.ajneb97.api.TurretPlaceEvent@EventHandlerpublicvoidturretPlace(TurretPlaceEvent event){Player player =event.getPlayer();Location l =event.getLocation();// This object contains all config of the turret, is not// the turret being placed, but the properties of it.Turret turret =event.getTurret();}
// Event called when a player tries to right click a turret. // ct.ajneb97.api.TurretRightClickEvent@EventHandlerpublicvoidturretClick(TurretRightClickEvent event){Player player =event.getPlayer();PlayerTurret playerTurret =event.getPlayerTurret();}
// Event called when a turret levels up. // ct.ajneb97.api.TurretLevelUpEvent@EventHandlerpublicvoidturretLevelUp(TurretLevelUpEvent event){Player player =event.getPlayer(); //Player leveling up the turretPlayerTurret playerTurret =event.getPlayerTurret();int newLevel =event.getNewLevel()}
Creating your own Custom Target Validations
Currently, ComplexTurrets will prevent targeting an entity or player if some conditions are met, for example if you set ignore_damage_to_invisible_players to true in the config, turrets will avoid targeting (and shooting) invisible players.
However, sometimes you need to make other validations, maybe even checking for conditions from other plugins. That's when custom target validations can help you.
First, start by creating a class associated with your new validation. This class must extends from the EntityValidation class. For example, I want to create a ComplexTurret target validation to prevent targeting a player who is flying.
Next, create a constructor that calls the super constructor with a certain name. This name corresponds to the name of the validation. In my case the name of the action will be turret_fly_validation.
LivingEntity livingEntity: The entity which the turret is targeting (is about to shoot).
PlayerTurret playerTurret: The turret itself.
You can now create your own logic and check for whatever condition you want. If you want to prevent the turret from targeting the entity, you must return false. I have created a condition to check if the player is flying or not. If the player is flying, I will return false, since I don't want the turret from targeting those players.
Finally, you must register this new target validation and make ComplexTurrets know about it. For that, when enabling your plugin, use the ComplexTurretsAPI.registerApiTargetValidations() method. The first parameter is the object of your plugin class, and the second parameter is a new object of your validation class.