diff --git a/Changelog.txt b/Changelog.txt
index 33151e218..21312639e 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -1,3 +1,7 @@
+Version 2.1.83
+ Updated hu_HU locale (thanks andris155)
+ (FIX) Arrow Retrieval will no longer work with piercing enchant on crossbows
+
Version 2.1.82
Added new WG flag 'mcmmo-hardcore' if set to negative players will not be penalized by hardcore mode (if hardcore mode is enabled) it defaults to true
Added proper error handling when loading parties file
diff --git a/pom.xml b/pom.xml
index dc655be5d..10b5b8c72 100755
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
4.0.0
com.gmail.nossr50.mcMMO
mcMMO
- 2.1.82
+ 2.1.83-SNAPSHOT
mcMMO
https://github.com/mcMMO-Dev/mcMMO
diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java b/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java
index 0def74ef8..24d21e972 100644
--- a/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java
+++ b/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java
@@ -25,7 +25,6 @@ import com.gmail.nossr50.util.StringUtils;
import com.gmail.nossr50.util.skills.RankUtils;
import com.google.common.collect.ImmutableList;
import org.bukkit.Color;
-import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable;
diff --git a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java
index f771cc1f2..ac6ceb618 100644
--- a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java
+++ b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java
@@ -22,7 +22,9 @@ import com.gmail.nossr50.util.BlockUtils;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.player.UserManager;
+import com.gmail.nossr50.util.random.RandomChanceUtil;
import com.gmail.nossr50.util.skills.CombatUtils;
+import com.gmail.nossr50.util.skills.SkillActivationType;
import com.gmail.nossr50.worldguard.WorldGuardManager;
import com.gmail.nossr50.worldguard.WorldGuardUtils;
import org.bukkit.Material;
@@ -109,7 +111,8 @@ public class EntityListener implements Listener {
ItemStack bow = event.getBow();
- if (bow != null && bow.containsEnchantment(Enchantment.ARROW_INFINITE)) {
+ if (bow != null
+ && bow.containsEnchantment(Enchantment.ARROW_INFINITE)) {
projectile.setMetadata(mcMMO.infiniteArrowKey, mcMMO.metadataValue);
}
@@ -123,9 +126,10 @@ public class EntityListener implements Listener {
if(WorldBlacklist.isWorldBlacklisted(event.getEntity().getWorld()))
return;
- if(event.getEntity() instanceof Player)
+ if(event.getEntity().getShooter() instanceof Player)
{
- Player player = (Player) event.getEntity();
+
+ Player player = (Player) event.getEntity().getShooter();
/* WORLD GUARD MAIN FLAG CHECK */
if(WorldGuardUtils.isWorldGuardLoaded())
@@ -133,16 +137,28 @@ public class EntityListener implements Listener {
if(!WorldGuardManager.getInstance().hasMainFlag(player))
return;
}
+
+ Projectile projectile = event.getEntity();
+
+ //Hacky stuff for 1.13/1.14 compat
+
+ String itemKey = player.getInventory().getItemInMainHand().getType().getKey().toString();
+
+ if(!itemKey.equalsIgnoreCase("minecraft:bow") && !itemKey.equalsIgnoreCase("minecraft:crossbow"))
+ return;
+
+ projectile.setMetadata(mcMMO.bowForceKey, new FixedMetadataValue(plugin, 1.0));
+ projectile.setMetadata(mcMMO.arrowDistanceKey, new FixedMetadataValue(plugin, projectile.getLocation()));
+
+ for(Enchantment enchantment : player.getInventory().getItemInMainHand().getEnchantments().keySet()) {
+ if(enchantment.getName().equalsIgnoreCase("piercing"))
+ return;
+ }
+
+ if (RandomChanceUtil.isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.ARCHERY_ARROW_RETRIEVAL, player)) {
+ projectile.setMetadata(mcMMO.trackedArrow, mcMMO.metadataValue);
+ }
}
-
- Projectile projectile = event.getEntity();
-
- if (!(projectile instanceof Arrow) || projectile.hasMetadata(mcMMO.bowForceKey)) {
- return;
- }
-
- projectile.setMetadata(mcMMO.bowForceKey, new FixedMetadataValue(plugin, 1.0));
- projectile.setMetadata(mcMMO.arrowDistanceKey, new FixedMetadataValue(plugin, projectile.getLocation()));
}
/**
diff --git a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java
index ea13ab98d..34f84ad60 100644
--- a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java
+++ b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java
@@ -279,7 +279,7 @@ public class PlayerListener implements Listener {
//TODO Update to new API once available! Waiting for case CAUGHT_TREASURE:
Item fishingCatch = (Item) event.getCaught();
- if (Config.getInstance().getFishingOverrideTreasures() &&
+ if (Config.getInstance(). getFishingOverrideTreasures() &&
fishingCatch.getItemStack().getType() != Material.SALMON &&
fishingCatch.getItemStack().getType() != Material.COD &&
fishingCatch.getItemStack().getType() != Material.TROPICAL_FISH &&
@@ -450,6 +450,11 @@ public class PlayerListener implements Listener {
Item drop = event.getItem();
ItemStack dropStack = drop.getItemStack();
+ //Remove tracking
+ if(drop.hasMetadata(mcMMO.trackedArrow)) {
+ drop.removeMetadata(mcMMO.trackedArrow, mcMMO.p);
+ }
+
if (drop.hasMetadata(mcMMO.disarmedItemKey)) {
if (!player.getName().equals(drop.getMetadata(mcMMO.disarmedItemKey).get(0).asString())) {
event.setCancelled(true);
diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java
index 1778f5737..9186e2206 100644
--- a/src/main/java/com/gmail/nossr50/mcMMO.java
+++ b/src/main/java/com/gmail/nossr50/mcMMO.java
@@ -118,6 +118,7 @@ public class mcMMO extends JavaPlugin {
public final static String customVisibleKey = "mcMMO: Name Visibility";
public final static String droppedItemKey = "mcMMO: Tracked Item";
public final static String infiniteArrowKey = "mcMMO: Infinite Arrow";
+ public final static String trackedArrow = "mcMMO: Tracked Arrow";
public final static String bowForceKey = "mcMMO: Bow Force";
public final static String arrowDistanceKey = "mcMMO: Arrow Distance";
public final static String BONUS_DROPS_METAKEY = "mcMMO: Double Drops";
diff --git a/src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java b/src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java
index b67c72274..3fd7537df 100644
--- a/src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java
+++ b/src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java
@@ -16,6 +16,7 @@ import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
+import org.bukkit.entity.Projectile;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
@@ -67,9 +68,10 @@ public class ArcheryManager extends SkillManager {
*
* @param target The {@link LivingEntity} damaged by the arrow
*/
- public void retrieveArrows(LivingEntity target) {
- if (RandomChanceUtil.isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.ARCHERY_ARROW_RETRIEVAL, getPlayer())) {
+ public void retrieveArrows(LivingEntity target, Projectile projectile) {
+ if(projectile.hasMetadata(mcMMO.trackedArrow)) {
Archery.incrementTrackerValue(target);
+ projectile.removeMetadata(mcMMO.trackedArrow, mcMMO.p); //Only 1 entity per projectile
}
}
diff --git a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java
index 26cd72431..4b82e237f 100644
--- a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java
+++ b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java
@@ -223,7 +223,7 @@ public final class CombatUtils {
}
if (!arrow.hasMetadata(mcMMO.infiniteArrowKey) && archeryManager.canRetrieveArrows()) {
- archeryManager.retrieveArrows(target);
+ archeryManager.retrieveArrows(target, arrow);
}
if(canUseLimitBreak(player, SubSkillType.ARCHERY_ARCHERY_LIMIT_BREAK))