mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-24 22:26:46 +01:00
Further separate crossbows from bows
This commit is contained in:
parent
7543d8be12
commit
5ed415e453
@ -6,6 +6,7 @@ import com.gmail.nossr50.config.WorldBlacklist;
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.datatypes.meta.ProjectileOriginMeta;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.subskills.interfaces.InteractType;
|
||||
import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent;
|
||||
@ -148,15 +149,32 @@ public class EntityListener implements Listener {
|
||||
|
||||
projectile.setMetadata(mcMMO.arrowDistanceKey, new FixedMetadataValue(plugin, projectile.getLocation()));
|
||||
|
||||
boolean isCrossbow = false;
|
||||
|
||||
//Track origin of projectile
|
||||
if(ItemUtils.hasItemInMainHand(player, "bow")) {
|
||||
markProjectileOriginAsBow(projectile);
|
||||
} else if(ItemUtils.hasItemInMainHand(player, "crossbow")) {
|
||||
markProjectileOriginAsCrossbow(projectile);
|
||||
isCrossbow = true;
|
||||
} else if(ItemUtils.hasItemInOffHand(player, "bow")) {
|
||||
markProjectileOriginAsBow(projectile);
|
||||
} else if(ItemUtils.hasItemInOffHand(player, "crossbow")) {
|
||||
markProjectileOriginAsCrossbow(projectile);
|
||||
isCrossbow = true;
|
||||
}
|
||||
|
||||
//Crossbow only
|
||||
if(isCrossbow) {
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||
|
||||
//Process launch event
|
||||
if(Permissions.skillEnabled(player, PrimarySkillType.CROSSBOWS)) {
|
||||
if(mcMMOPlayer != null) {
|
||||
mcMMOPlayer.getCrossbowManager().processProjectileLaunchEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for(Enchantment enchantment : player.getInventory().getItemInMainHand().getEnchantments().keySet()) {
|
||||
@ -164,11 +182,14 @@ public class EntityListener implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
//Bow only
|
||||
if(!isCrossbow) {
|
||||
if (RandomChanceUtil.isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.ARCHERY_ARROW_RETRIEVAL, player)) {
|
||||
projectile.setMetadata(mcMMO.trackedArrow, mcMMO.metadataValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void markProjectileOriginAsCrossbow(Projectile projectile) {
|
||||
projectile.setMetadata(mcMMO.PROJECTILE_ORIGIN_METAKEY, new ProjectileOriginMeta(plugin, 2));
|
||||
|
@ -8,6 +8,7 @@ import com.gmail.nossr50.skills.archery.Archery;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||
|
||||
public class CrossbowManager extends SkillManager {
|
||||
public CrossbowManager(McMMOPlayer mcMMOPlayer) {
|
||||
@ -36,4 +37,13 @@ public class CrossbowManager extends SkillManager {
|
||||
return 1 + Math.min(firedLocation.distance(targetLocation), 50) * Archery.DISTANCE_XP_MULTIPLIER;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used for sub-skills that activate on projectile launch
|
||||
* @param projectileLaunchEvent target event
|
||||
*/
|
||||
public void processProjectileLaunchEvent(ProjectileLaunchEvent projectileLaunchEvent) {
|
||||
mcMMOPlayer.getPlayer().sendMessage("Pew pew!");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user