mirror of
https://github.com/TotalFreedomMC/PlayerParticles.git
synced 2025-02-11 03:29:53 +00:00
Performance improvement for detecting player movement
This commit is contained in:
parent
e8c9278e76
commit
5d55eb05c2
4 changed files with 26 additions and 28 deletions
|
@ -10,7 +10,7 @@ sourceCompatibility = 1.8
|
|||
targetCompatibility = 1.8
|
||||
compileJava.options.encoding = 'UTF-8'
|
||||
group = 'dev.esophose'
|
||||
version = '7.8'
|
||||
version = '7.9'
|
||||
|
||||
java {
|
||||
withJavadocJar()
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
=== v7.9 ===
|
||||
* Fixed performance issues with toggle-on-move setting
|
||||
* Fixed possible concurrency deadlock with arrows and fishing styles
|
||||
=== v7.8 ===
|
||||
+ Added style 'fishing'
|
||||
* Moved GUI icon settings from the config.yml to the effects/ and styles/ files. You will need to set these again.
|
||||
|
|
|
@ -10,6 +10,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
@ -55,10 +56,7 @@ public class PPlayerCombatListener implements Listener {
|
|||
*/
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onPlayerAttack(EntityDamageByEntityEvent event) {
|
||||
if (!Setting.TOGGLE_ON_COMBAT.getBoolean())
|
||||
return;
|
||||
|
||||
if (!(event.getEntity() instanceof Player))
|
||||
if (event.getEntity().getType() != EntityType.PLAYER)
|
||||
return;
|
||||
|
||||
Player attacker;
|
||||
|
|
|
@ -11,21 +11,38 @@ import java.util.Map;
|
|||
import java.util.UUID;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class PPlayerMovementListener implements Listener {
|
||||
|
||||
private static final int CHECK_INTERVAL = 3;
|
||||
private Map<UUID, Integer> timeSinceLastMovement;
|
||||
private Map<UUID, Vector> previousVectors;
|
||||
|
||||
public PPlayerMovementListener() {
|
||||
DataManager dataManager = PlayerParticles.getInstance().getManager(DataManager.class);
|
||||
this.timeSinceLastMovement = new HashMap<>();
|
||||
this.previousVectors = new HashMap<>();
|
||||
|
||||
Bukkit.getScheduler().runTaskTimer(PlayerParticles.getInstance(), () -> {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
UUID playerUUID = player.getUniqueId();
|
||||
Vector previousVector = this.previousVectors.get(playerUUID);
|
||||
Location currentLocation = player.getLocation();
|
||||
Vector currentVector = new Vector(currentLocation.getBlockX(), currentLocation.getBlockY(), currentLocation.getBlockZ());
|
||||
this.previousVectors.put(playerUUID, currentVector);
|
||||
|
||||
if (previousVector == null || !previousVector.equals(currentVector)) {
|
||||
if (!this.timeSinceLastMovement.containsKey(playerUUID)) {
|
||||
this.timeSinceLastMovement.put(playerUUID, 0);
|
||||
} else {
|
||||
this.timeSinceLastMovement.replace(playerUUID, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<UUID> toRemove = new ArrayList<>();
|
||||
|
||||
for (UUID uuid : this.timeSinceLastMovement.keySet()) {
|
||||
|
@ -45,24 +62,4 @@ public class PPlayerMovementListener implements Listener {
|
|||
}, 0, CHECK_INTERVAL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to detect if the player is moving
|
||||
*
|
||||
* @param event The event
|
||||
*/
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onPlayerMove(PlayerMoveEvent event) {
|
||||
Location to = event.getTo();
|
||||
Location from = event.getFrom();
|
||||
if (to == null || (to.getBlockX() == from.getBlockX() && to.getBlockY() == from.getBlockY() && to.getBlockZ() == from.getBlockZ()))
|
||||
return;
|
||||
|
||||
UUID playerUUID = event.getPlayer().getUniqueId();
|
||||
if (!this.timeSinceLastMovement.containsKey(playerUUID)) {
|
||||
this.timeSinceLastMovement.put(playerUUID, 0);
|
||||
} else {
|
||||
this.timeSinceLastMovement.replace(playerUUID, 0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue