use of me.deecaad.weaponmechanics.wrappers.EntityWrapper in project MechanicsMain by WeaponMechanics.
the class WeaponMechanics method getPlayerWrapper.
/**
* This method can't return null because new PlayerWrapper is created if not found.
* Use mainly getEntityWrapper() instead of this unless you especially need something from PlayerWrapper.
*
* @param player the player wrapper to get
* @return the player wrapper
*/
public static PlayerWrapper getPlayerWrapper(Player player) {
EntityWrapper wrapper = plugin.entityWrappers.get(player);
if (wrapper == null) {
wrapper = new PlayerWrapper(player);
plugin.entityWrappers.put(player, wrapper);
}
if (!(wrapper instanceof PlayerWrapper)) {
// Exception is better in this case as we need to know where this mistake happened
throw new IllegalArgumentException("Tried to get PlayerWrapper from player which didn't have PlayerWrapper (only EntityWrapper)...?");
}
return (PlayerWrapper) wrapper;
}
use of me.deecaad.weaponmechanics.wrappers.EntityWrapper in project MechanicsMain by WeaponMechanics.
the class DamageHandler method tryUse.
/**
* @return false if damaging was cancelled
*/
public boolean tryUse(LivingEntity victim, double damage, DamagePoint point, boolean isBackstab, LivingEntity shooter, String weaponTitle, ItemStack weaponStack, double distanceTravelled) {
Configuration config = getConfigurations();
boolean isFriendlyFire = config.getBool(weaponTitle + ".Damage.Enable_Friendly_Fire");
if (!isFriendlyFire && !DamageUtil.canHarm(shooter, victim)) {
return false;
}
boolean isOwnerImmune = config.getBool(weaponTitle + ".Damage.Enable_Owner_Immunity");
if (isOwnerImmune && victim.equals(shooter)) {
return false;
}
// Critical Hit chance
double chance = config.getDouble(weaponTitle + ".Damage.Critical_Hit.Chance", -1);
boolean isCritical = chance != -1 && NumberUtil.chance((chance / 100));
int armorDamage = config.getInt(weaponTitle + ".Damage.Armor_Damage");
int fireTicks = config.getInt(weaponTitle + ".Damage.Fire_Ticks");
WeaponDamageEntityEvent damageEntityEvent = new WeaponDamageEntityEvent(weaponTitle, weaponStack, shooter, victim, damage, isBackstab, isCritical, point, armorDamage, fireTicks, distanceTravelled);
Bukkit.getPluginManager().callEvent(damageEntityEvent);
if (damageEntityEvent.isCancelled())
return false;
fireTicks = damageEntityEvent.getFireTicks();
point = damageEntityEvent.getPoint();
if (DamageUtil.apply(shooter, victim, damageEntityEvent.getFinalDamage())) {
WeaponMechanics.debug.debug("Damage was cancelled");
// Damage was cancelled
return false;
}
DamageUtil.damageArmor(victim, damageEntityEvent.getArmorDamage(), point);
// Fire ticks
if (fireTicks > 0) {
victim.setFireTicks(fireTicks);
}
EntityWrapper shooterWrapper = WeaponMechanics.getEntityWrapper(shooter, true);
CastData shooterCast;
if (shooterWrapper != null) {
shooterCast = new CastData(shooterWrapper, weaponTitle, weaponStack);
} else {
shooterCast = new CastData(shooter, weaponTitle, weaponStack);
}
shooterCast.setData(CommonDataTags.TARGET_LOCATION.name(), victim.getLocation());
shooterCast.setData(CommonDataTags.SHOOTER_NAME.name(), shooter.getName());
shooterCast.setData(CommonDataTags.VICTIM_NAME.name(), victim.getName());
EntityWrapper victimWrapper = WeaponMechanics.getEntityWrapper(victim, true);
CastData victimCast;
if (victimWrapper != null) {
victimCast = new CastData(victimWrapper, weaponTitle, weaponStack);
} else {
victimCast = new CastData(victim, weaponTitle, weaponStack);
}
victimCast.setData(CommonDataTags.TARGET_LOCATION.name(), shooter.getLocation());
victimCast.setData(CommonDataTags.SHOOTER_NAME.name(), shooter.getName());
victimCast.setData(CommonDataTags.VICTIM_NAME.name(), victim.getName());
// On all damage
useMechanics(config, shooterCast, victimCast, weaponTitle + ".Damage");
// On point
if (point != null)
useMechanics(config, shooterCast, victimCast, weaponTitle + ".Damage." + point.getReadable());
// On backstab
if (damageEntityEvent.isBackstab()) {
useMechanics(config, shooterCast, victimCast, weaponTitle + ".Damage.Backstab");
}
// On critical
if (damageEntityEvent.isCritical()) {
useMechanics(config, shooterCast, victimCast, weaponTitle + ".Damage.Critical_Hit");
}
if (victim.isDead() || victim.getHealth() <= 0.0) {
Bukkit.getPluginManager().callEvent(new WeaponKillEntityEvent(weaponTitle, weaponStack, shooter, victim, damageEntityEvent));
// On kill
useMechanics(config, shooterCast, victimCast, weaponTitle + ".Damage.Kill");
}
return true;
}
use of me.deecaad.weaponmechanics.wrappers.EntityWrapper in project MechanicsMain by WeaponMechanics.
the class WeaponMechanicsAPI method getScopeLevel.
/**
* Returns how far the <code>entity</code> is zooming in. 0 means that the
* entity is not scoping at all. Any other number means that the entity is
* scoping.
*
* @param entity The non-null living entity to check the scope state of.
* @return The non-negative zoom amount.
* @see EntityWrapper
* @see PlayerWrapper
*/
@Nonnegative
public static int getScopeLevel(@Nonnull LivingEntity entity) {
checkState();
notNull(entity);
EntityWrapper wrapper = WeaponMechanics.getEntityWrapper(entity, true);
if (wrapper == null)
return 0;
return Math.max(wrapper.getMainHandData().getZoomData().getZoomAmount(), wrapper.getOffHandData().getZoomData().getZoomAmount());
}
use of me.deecaad.weaponmechanics.wrappers.EntityWrapper in project MechanicsMain by WeaponMechanics.
the class WeaponListeners method equip.
@EventHandler
public void equip(EntityEquipmentEvent e) {
if (e.isArmor())
return;
LivingEntity entity = (LivingEntity) e.getEntity();
EntityWrapper entityWrapper = WeaponMechanics.getEntityWrapper(entity);
ItemStack weaponStack = e.getEquipped();
// Also try auto converting to weapon
String weaponTitle = weaponHandler.getInfoHandler().getWeaponTitle(weaponStack, true);
boolean alreadyUsedEquipMechanics = false;
boolean mainhand = e.getSlot() == EquipmentSlot.HAND;
HandData handData = mainhand ? entityWrapper.getMainHandData() : entityWrapper.getOffHandData();
handData.setCurrentWeaponTitle(weaponTitle);
if (weaponTitle != null) {
if (e.getEntityType() == EntityType.PLAYER) {
WeaponInfoDisplay weaponInfoDisplay = getConfigurations().getObject(weaponTitle + ".Info.Weapon_Info_Display", WeaponInfoDisplay.class);
if (weaponInfoDisplay != null)
weaponInfoDisplay.send((PlayerWrapper) entityWrapper, e.getSlot());
}
weaponHandler.getSkinHandler().tryUse(entityWrapper, weaponTitle, weaponStack, e.getSlot());
Mechanics equipMechanics = getConfigurations().getObject(weaponTitle + ".Info.Weapon_Equip_Mechanics", Mechanics.class);
if (equipMechanics != null) {
equipMechanics.use(new CastData(entityWrapper, weaponTitle, weaponStack));
alreadyUsedEquipMechanics = true;
}
handData.setLastEquipTime(System.currentTimeMillis());
if (getConfigurations().getBool(weaponTitle + ".Info.Show_Cooldown.Weapon_Equip_Delay") && e.getEntityType() == EntityType.PLAYER) {
CompatibilityAPI.getEntityCompatibility().setCooldown((Player) entity, weaponStack.getType(), getConfigurations().getInt(weaponTitle + ".Info.Weapon_Equip_Delay") / 50);
} else if (CompatibilityAPI.getEntityCompatibility().hasCooldown((Player) entity, weaponStack.getType())) {
CompatibilityAPI.getEntityCompatibility().setCooldown((Player) entity, weaponStack.getType(), 0);
}
Bukkit.getPluginManager().callEvent(new WeaponEquipEvent(weaponTitle, weaponStack, entity, e.getSlot() == EquipmentSlot.HAND));
}
ItemStack dequipped = e.getDequipped();
String dequippedWeapon = weaponHandler.getInfoHandler().getWeaponTitle(dequipped, false);
if (dequippedWeapon != null) {
// Don't use holster mechanics is equip mechanics were already used
if (!alreadyUsedEquipMechanics) {
Mechanics holsterMechanics = getConfigurations().getObject(dequippedWeapon + ".Info.Weapon_Holster_Mechanics", Mechanics.class);
if (holsterMechanics != null)
holsterMechanics.use(new CastData(entityWrapper, dequippedWeapon, dequipped));
}
if (weaponTitle == null && CompatibilityAPI.getEntityCompatibility().hasCooldown((Player) entity, dequipped.getType())) {
CompatibilityAPI.getEntityCompatibility().setCooldown((Player) entity, dequipped.getType(), 0);
}
}
}
use of me.deecaad.weaponmechanics.wrappers.EntityWrapper in project MechanicsMain by WeaponMechanics.
the class WeaponListeners method click.
@EventHandler(ignoreCancelled = true)
public void click(InventoryClickEvent e) {
if (!(e.getWhoClicked() instanceof Player))
return;
// Off hand is also considered as quickbar slot
if (e.getSlotType() != InventoryType.SlotType.QUICKBAR)
return;
EntityWrapper entityWrapper = WeaponMechanics.getEntityWrapper(e.getWhoClicked());
entityWrapper.getMainHandData().cancelTasks();
entityWrapper.getOffHandData().cancelTasks();
}
Aggregations