Implemented CustomPlayerMoveEvent that only fires on certain conditions and only checks every 10ticks
parent
c0917a1ab6
commit
ddb6525c40
@ -0,0 +1,35 @@
|
|||||||
|
package eu.ruekov.ruakij.LinkedBeaconTeleporters.customPlayerMoveEvent;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.io.InvalidObjectException;
|
||||||
|
|
||||||
|
public class CustomPlayerMoveEvent {
|
||||||
|
|
||||||
|
Player p;
|
||||||
|
Location loc;
|
||||||
|
Location oldLoc;
|
||||||
|
protected double distance;
|
||||||
|
public CustomPlayerMoveEvent(Player p, Location loc, Location oldLoc){
|
||||||
|
this.p = p;
|
||||||
|
this.loc = loc;
|
||||||
|
this.oldLoc = oldLoc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player player(){
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Location location(){
|
||||||
|
return loc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Location oldLocation(){
|
||||||
|
return oldLoc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double distance(){
|
||||||
|
return distance;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,89 @@
|
|||||||
|
package eu.ruekov.ruakij.LinkedBeaconTeleporters.customPlayerMoveEvent;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class CustomPlayerMoveEventHandler {
|
||||||
|
|
||||||
|
List<CustomPlayerMoveEventListener> listeners = new ArrayList<>();
|
||||||
|
|
||||||
|
HashMap<UUID, Location> oldPlayerLoc = new HashMap<>();
|
||||||
|
|
||||||
|
boolean locationChangeOnBlockChange;
|
||||||
|
public CustomPlayerMoveEventHandler(Plugin plugin, boolean locationChangeOnBlockChange){
|
||||||
|
this.locationChangeOnBlockChange = locationChangeOnBlockChange;
|
||||||
|
|
||||||
|
startRunnable(plugin);
|
||||||
|
}
|
||||||
|
public CustomPlayerMoveEventHandler(Plugin plugin){
|
||||||
|
this(plugin, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void startRunnable(Plugin plugin){
|
||||||
|
|
||||||
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, () -> {
|
||||||
|
// Dont do anything without listeners
|
||||||
|
if(listeners.size() == 0) return;
|
||||||
|
|
||||||
|
// Check all players
|
||||||
|
for(Player p : Bukkit.getOnlinePlayers()){
|
||||||
|
UUID uuid = p.getUniqueId();
|
||||||
|
Location loc = p.getLocation();
|
||||||
|
|
||||||
|
// Get old-location
|
||||||
|
Location oldLoc = oldPlayerLoc.get(uuid);
|
||||||
|
|
||||||
|
// Create data-obj
|
||||||
|
CustomPlayerMoveEvent e = new CustomPlayerMoveEvent(p, loc, oldLoc);
|
||||||
|
|
||||||
|
// When player has an old-location
|
||||||
|
if(oldLoc != null){
|
||||||
|
if(!locationChangeOnBlockChange){
|
||||||
|
double distance = loc.distance(oldLoc);
|
||||||
|
e.distance = distance;
|
||||||
|
|
||||||
|
if(distance > 0)
|
||||||
|
locationChangeListeners(e);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
locationChangeListeners(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
tickListeners(e);
|
||||||
|
|
||||||
|
// Save old location
|
||||||
|
oldPlayerLoc.put(uuid, loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
}, 20, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean blockLocationChanged(Location loc, Location oldLoc){
|
||||||
|
return loc.getBlockX() != oldLoc.getBlockX() ||
|
||||||
|
loc.getBlockY() != oldLoc.getBlockY() ||
|
||||||
|
loc.getBlockZ() != oldLoc.getBlockZ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void tickListeners(CustomPlayerMoveEvent e){
|
||||||
|
for(CustomPlayerMoveEventListener listener : listeners){
|
||||||
|
listener.tick(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void locationChangeListeners(CustomPlayerMoveEvent e){
|
||||||
|
for(CustomPlayerMoveEventListener listener : listeners){
|
||||||
|
listener.locationChange(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void registerListener(CustomPlayerMoveEventListener listener){
|
||||||
|
listeners.add(listener);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package eu.ruekov.ruakij.LinkedBeaconTeleporters.customPlayerMoveEvent;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public interface CustomPlayerMoveEventListener {
|
||||||
|
|
||||||
|
void tick(CustomPlayerMoveEvent e);
|
||||||
|
|
||||||
|
void locationChange(CustomPlayerMoveEvent e);
|
||||||
|
}
|
Loading…
Reference in New Issue