mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2026-02-17 17:32:36 +01:00
Fix archery entity tracking failing often on Folia (#5260)
This commit is contained in:
@@ -6,9 +6,10 @@ import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
|||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.util.ItemUtils;
|
import com.gmail.nossr50.util.ItemUtils;
|
||||||
import com.gmail.nossr50.util.skills.RankUtils;
|
import com.gmail.nossr50.util.skills.RankUtils;
|
||||||
import java.util.ArrayList;
|
import java.util.Map;
|
||||||
import java.util.Iterator;
|
import java.util.UUID;
|
||||||
import java.util.List;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@@ -16,7 +17,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class Archery {
|
public class Archery {
|
||||||
private static final List<TrackedEntity> trackedEntities = new ArrayList<>();
|
private static final Map<UUID, TrackedEntity> trackedEntities = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
public static double skillShotMaxBonusDamage = mcMMO.p.getAdvancedConfig()
|
public static double skillShotMaxBonusDamage = mcMMO.p.getAdvancedConfig()
|
||||||
.getSkillShotDamageMax();
|
.getSkillShotDamageMax();
|
||||||
@@ -27,25 +28,12 @@ public class Archery {
|
|||||||
.getArcheryDistanceMultiplier();
|
.getArcheryDistanceMultiplier();
|
||||||
|
|
||||||
protected static void incrementTrackerValue(LivingEntity livingEntity) {
|
protected static void incrementTrackerValue(LivingEntity livingEntity) {
|
||||||
for (TrackedEntity trackedEntity : trackedEntities) {
|
final TrackedEntity trackedEntity = trackedEntities.computeIfAbsent(livingEntity.getUniqueId(), k -> new TrackedEntity(livingEntity));
|
||||||
if (trackedEntity.getLivingEntity().getEntityId() == livingEntity.getEntityId()) {
|
|
||||||
trackedEntity.incrementArrowCount();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
addToTracker(livingEntity); // If the entity isn't tracked yet
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static void addToTracker(LivingEntity livingEntity) {
|
|
||||||
TrackedEntity trackedEntity = new TrackedEntity(livingEntity);
|
|
||||||
|
|
||||||
trackedEntity.incrementArrowCount();
|
trackedEntity.incrementArrowCount();
|
||||||
trackedEntities.add(trackedEntity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static void removeFromTracker(TrackedEntity trackedEntity) {
|
protected static void removeFromTracker(TrackedEntity trackedEntity) {
|
||||||
trackedEntities.remove(trackedEntity);
|
trackedEntities.remove(trackedEntity.getID());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -54,17 +42,11 @@ public class Archery {
|
|||||||
* @param livingEntity The entity hit by the arrows
|
* @param livingEntity The entity hit by the arrows
|
||||||
*/
|
*/
|
||||||
public static void arrowRetrievalCheck(@NotNull LivingEntity livingEntity) {
|
public static void arrowRetrievalCheck(@NotNull LivingEntity livingEntity) {
|
||||||
for (Iterator<TrackedEntity> entityIterator = trackedEntities.iterator();
|
final TrackedEntity trackedEntity = trackedEntities.remove(livingEntity.getUniqueId());
|
||||||
entityIterator.hasNext(); ) {
|
if (trackedEntity != null) {
|
||||||
TrackedEntity trackedEntity = entityIterator.next();
|
ItemUtils.spawnItems(null, livingEntity.getLocation(),
|
||||||
|
new ItemStack(Material.ARROW), trackedEntity.getArrowCount(),
|
||||||
if (trackedEntity.getID() == livingEntity.getUniqueId()) {
|
ItemSpawnReason.ARROW_RETRIEVAL_ACTIVATED);
|
||||||
ItemUtils.spawnItems(null, livingEntity.getLocation(),
|
|
||||||
new ItemStack(Material.ARROW), trackedEntity.getArrowCount(),
|
|
||||||
ItemSpawnReason.ARROW_RETRIEVAL_ACTIVATED);
|
|
||||||
entityIterator.remove();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user