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
|
targetCompatibility = 1.8
|
||||||
compileJava.options.encoding = 'UTF-8'
|
compileJava.options.encoding = 'UTF-8'
|
||||||
group = 'dev.esophose'
|
group = 'dev.esophose'
|
||||||
version = '7.8'
|
version = '7.9'
|
||||||
|
|
||||||
java {
|
java {
|
||||||
withJavadocJar()
|
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 ===
|
=== v7.8 ===
|
||||||
+ Added style 'fishing'
|
+ Added style 'fishing'
|
||||||
* Moved GUI icon settings from the config.yml to the effects/ and styles/ files. You will need to set these again.
|
* 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.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Projectile;
|
import org.bukkit.entity.Projectile;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
@ -55,10 +56,7 @@ public class PPlayerCombatListener implements Listener {
|
||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void onPlayerAttack(EntityDamageByEntityEvent event) {
|
public void onPlayerAttack(EntityDamageByEntityEvent event) {
|
||||||
if (!Setting.TOGGLE_ON_COMBAT.getBoolean())
|
if (event.getEntity().getType() != EntityType.PLAYER)
|
||||||
return;
|
|
||||||
|
|
||||||
if (!(event.getEntity() instanceof Player))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Player attacker;
|
Player attacker;
|
||||||
|
|
|
@ -11,21 +11,38 @@ import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
public class PPlayerMovementListener implements Listener {
|
public class PPlayerMovementListener implements Listener {
|
||||||
|
|
||||||
private static final int CHECK_INTERVAL = 3;
|
private static final int CHECK_INTERVAL = 3;
|
||||||
private Map<UUID, Integer> timeSinceLastMovement;
|
private Map<UUID, Integer> timeSinceLastMovement;
|
||||||
|
private Map<UUID, Vector> previousVectors;
|
||||||
|
|
||||||
public PPlayerMovementListener() {
|
public PPlayerMovementListener() {
|
||||||
DataManager dataManager = PlayerParticles.getInstance().getManager(DataManager.class);
|
DataManager dataManager = PlayerParticles.getInstance().getManager(DataManager.class);
|
||||||
this.timeSinceLastMovement = new HashMap<>();
|
this.timeSinceLastMovement = new HashMap<>();
|
||||||
|
this.previousVectors = new HashMap<>();
|
||||||
|
|
||||||
Bukkit.getScheduler().runTaskTimer(PlayerParticles.getInstance(), () -> {
|
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<>();
|
List<UUID> toRemove = new ArrayList<>();
|
||||||
|
|
||||||
for (UUID uuid : this.timeSinceLastMovement.keySet()) {
|
for (UUID uuid : this.timeSinceLastMovement.keySet()) {
|
||||||
|
@ -45,24 +62,4 @@ public class PPlayerMovementListener implements Listener {
|
||||||
}, 0, CHECK_INTERVAL);
|
}, 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