ParticleProjectileApi
Description
This API is designed to allow plugin developers to easily add customized particle projectiles, hence the name. ParticleProjectileApi comes with its own event classes giving the developer a way to cancel an effect when a particle hits, this is quite useful in say mini-games to prevent friendly-fire. It is completely possible to create multiple projectile classes and is encouraged too. When extending the ParticleProjectile class, the developer will be met with five methods: OnHit, OnHitBlock, OnHitEntity, OnPenetrateBlock, OnPenetrateEntity, and OnMove. These methods allow for adding code to run when a projectile hits, passes through something, or moves.
Features
- method to launch particles (No packets used)
- Custom events that can be canceled
- Create multiple projectile classes for different effects
- More to come!
Usage
MyProjectile.class
package com.aim.coltonjgriswold.projectiles; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.entity.Damageable; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import com.aim.coltonjgriswold.api.ParticleProjectile; public class MyProjectile extends ParticleProjectile { public MyProjectile() { super(Particle.REDSTONE, 0.1, 7.5, 20.0, 128.0);<br /> ignoreMaterial(Material.STATIONARY_WATER);<br /> setColor(ParticleColor.fromRGB(255, 0, 0); //Initialize a projectile with a color of red, a hitbox of 0.1 cubed, Mass of 7.5 grams, speed of 20.0 meters/second, max distance of 128 meters, and ignore STATIONARY_WATER. } @Override public void OnHit(LivingEntity who, Location start, Location end) { //Do something when reach max distance } @Override public void OnHitBlock(LivingEntity who, Location start, Location end, Block what) { //Do something when hit block } @Override public void OnHitEntity(LivingEntity who, Location start, Location end, Entity what) { //Do something when hit entity } @Override public void OnPenetrateBlock(LivingEntity who, Location where, Block what) { //Do something when passing through a block } @Override public void OnPenetrateEntity(LivingEntity who, Location where, Entity what) { //Do something when passing through an entity }
public void OnMove(Location previous, Location current, double step) {
//Do something when the the particle moves
}
}
MyPlugin.class
package com.aim.coltonjgriswold; import org.bukkit.Material; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.util.Vector; import com.aim.coltonjgriswold.api.utilities.ParticleColor; import com.aim.coltonjgriswold.projectiles.MyProjectile; public class MyPlugin extends JavaPlugin implements Listener { MyProjectile projectile; public void onEnable() { getServer().getPluginManager().registerEvents(this, this); projectile = new MyProjectile(); } public void onDisable() { } @EventHandler public void oninteract(PlayerInteractEvent event) { Material item = event.getPlayer().getInventory().getItemInMainHand().getType(); if (item == Material.STICK) { //launch MyProjectile with physics turned on projectile.launch(event.getPlayer(), true); } } }
Example Plugin Utilizing ParticleProjectileApi & Javadocs
Javadocs: ParticleProjectileApi
Example plugin:
Comments