Map gets destroyed on Interaction although the InteractionEvent is canceled #51
```package net.umidy.epmc.mapreflection;
import net.umidy.epmc.main.Main;
import net.umidy.epmc.ridecount.RideCountAPI;
import net.umidy.epmc.ridecount.RideData;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.*;
import tech.sbdevelopment.mapreflectionapi.api.events.MapInteractEvent;
import java.util.HashMap;
public class VirtualMapEvents implements Listener {
private int getCountFromClickedMap(Location location, Player player) {
if (location == null) return 0;
HashMap<String, Integer> data = Main.rideCountAPI.getRideData(player).getCounts();
for (VirtualFrame virtualFrame : VirtualMapManager.frames) {
if (location.distance(virtualFrame.getFrameLocation()) < 2) {
return data.get(virtualFrame.getAttraction());
}
}
return 0;
}
@EventHandler
public void onMapInteract(MapInteractEvent e) {
e.getPlayer().sendMessage(Main.Prefix + ChatColor.BLUE + "Your Count: " + getCountFromClickedMap(e.getFrame().getLocation(), e.getPlayer()));
e.setCancelled(true);
}
@EventHandler
public void onMapDestruction(EntityDamageByEntityEvent event) {
if (event.getEntity().getType().equals(EntityType.ITEM_FRAME) && !event.getDamager().hasPermission("epmc.team")) {
event.setCancelled(true);
}
if (event.getEntity().getType().equals(EntityType.GLOW_ITEM_FRAME) && !event.getDamager().hasPermission("epmc.team")) {
event.setCancelled(true);
}
}
private static final int distance = 1024;
@EventHandler
public void onPlayerTeleport(PlayerTeleportEvent e) {
if (e.getTo() == null) return;
if (e.getFrom().getChunk().equals(e.getTo().getChunk())) return;
Bukkit.getScheduler().runTaskLater(Main.getInstance(), () -> {
for (VirtualFrame frame : VirtualMapManager.getFramesInWorld(e.getPlayer().getWorld())) {
double distanceSquared = e.getTo().distanceSquared(frame.getFrameLocation());
if (distanceSquared > distance) {
VirtualMapManager.hidePlayer(frame, e.getPlayer());
} else {
VirtualMapManager.showPlayer(frame, e.getPlayer());
}
}
for (VirtualRidephoto photo : VirtualMapManager.getRidephotosInWorld(e.getPlayer().getWorld())) {
double distanceSquared = e.getTo().distanceSquared(photo.getFrameLocation());
if (distanceSquared > distance) {
VirtualMapManager.hidePlayer(photo, e.getPlayer());
} else {
VirtualMapManager.showPlayer(photo, e.getPlayer());
}
}
for (VirtualVideo virtualVideo : VirtualMapManager.getVideosInWorld(e.getPlayer().getWorld())) {
double distanceSquared = e.getTo().distanceSquared(virtualVideo.getItemframeLocations()[0][0]);
if (distanceSquared > distance) {
VirtualMapManager.hidePlayer(virtualVideo, e.getPlayer());
} else {
VirtualMapManager.showPlayer(virtualVideo, e.getPlayer());
}
}
}, 5L);
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent e) {
Bukkit.getScheduler().runTaskLaterAsynchronously(Main.getInstance(), () -> {
Bukkit.getScheduler().runTask(Main.getInstance(), () -> {
for (VirtualFrame frame : VirtualMapManager.getFramesInWorld(e.getPlayer().getWorld())) {
double distanceSquared = e.getPlayer().getLocation().distanceSquared(frame.getFrameLocation());
if (distanceSquared > distance) {
VirtualMapManager.hidePlayer(frame, e.getPlayer());
} else {
VirtualMapManager.showPlayer(frame, e.getPlayer());
}
}
for (VirtualRidephoto photo : VirtualMapManager.getRidephotosInWorld(e.getPlayer().getWorld())) {
double distanceSquared = e.getPlayer().getLocation().distanceSquared(photo.getFrameLocation());
if (distanceSquared > distance) {
VirtualMapManager.hidePlayer(photo, e.getPlayer());
} else {
VirtualMapManager.showPlayer(photo, e.getPlayer());
}
}
for (VirtualVideo virtualVideo : VirtualMapManager.getVideosInWorld(e.getPlayer().getWorld())) {
double distanceSquared = e.getPlayer().getLocation().distanceSquared(virtualVideo.getItemframeLocations()[0][0]);
if (distanceSquared > distance) {
VirtualMapManager.hidePlayer(virtualVideo, e.getPlayer());
} else {
VirtualMapManager.showPlayer(virtualVideo, e.getPlayer());
}
}
});
}, 20);
}
@EventHandler
public void onPlayerLeave(PlayerQuitEvent e) {
for (VirtualFrame frame : VirtualMapManager.getFrames()) {
VirtualMapManager.hidePlayer(frame, e.getPlayer());
}
for (VirtualRidephoto photo : VirtualMapManager.getPhotos()) {
VirtualMapManager.hidePlayer(photo, e.getPlayer());
}
for (VirtualVideo virtualVideo : VirtualMapManager.getVideos()) {
VirtualMapManager.hidePlayer(virtualVideo, e.getPlayer());
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerDeath(PlayerDeathEvent e) {
for (VirtualFrame frame : VirtualMapManager.getFramesInWorld(e.getEntity().getWorld())) {
VirtualMapManager.hidePlayer(frame, e.getEntity());
}
for (VirtualRidephoto photo : VirtualMapManager.getRidephotosInWorld(e.getEntity().getWorld())) {
VirtualMapManager.hidePlayer(photo, e.getEntity());
}
for (VirtualVideo virtualVideo : VirtualMapManager.getVideosInWorld(e.getEntity().getWorld())) {
VirtualMapManager.hidePlayer(virtualVideo, e.getEntity());
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerRespawn(PlayerRespawnEvent e) {
Bukkit.getScheduler().runTaskLaterAsynchronously(Main.getInstance(), () -> {
for (VirtualFrame frame : VirtualMapManager.getFramesInWorld(e.getPlayer().getWorld())) {
double distanceSquared = e.getPlayer().getLocation().distanceSquared(frame.getFrameLocation());
if (distanceSquared > distance) {
VirtualMapManager.hidePlayer(frame, e.getPlayer());
} else {
VirtualMapManager.showPlayer(frame, e.getPlayer());
}
}
for (VirtualRidephoto photo : VirtualMapManager.getRidephotosInWorld(e.getPlayer().getWorld())) {
double distanceSquared = e.getPlayer().getLocation().distanceSquared(photo.getFrameLocation());
if (distanceSquared > distance) {
VirtualMapManager.hidePlayer(photo, e.getPlayer());
} else {
VirtualMapManager.showPlayer(photo, e.getPlayer());
}
}
for (VirtualVideo virtualVideo : VirtualMapManager.getVideosInWorld(e.getPlayer().getWorld())) {
double distanceSquared = e.getPlayer().getLocation().distanceSquared(virtualVideo.getItemframeLocations()[0][0]);
if (distanceSquared > distance) {
VirtualMapManager.hidePlayer(virtualVideo, e.getPlayer());
} else {
VirtualMapManager.showPlayer(virtualVideo, e.getPlayer());
}
}
}, 20);
}
@EventHandler
public void onPlayerMove(PlayerMoveEvent e) {
if (e.getTo() == null) return;
if (e.getFrom().getChunk().equals(e.getTo().getChunk())) return;
for (VirtualFrame frame : VirtualMapManager.getFramesInWorld(e.getPlayer().getWorld())) {
double distanceSquared = e.getTo().distanceSquared(frame.getFrameLocation());
if (distanceSquared > distance) {
VirtualMapManager.hidePlayer(frame, e.getPlayer());
} else {
VirtualMapManager.showPlayer(frame, e.getPlayer());
}
}
for (VirtualRidephoto photo : VirtualMapManager.getRidephotosInWorld(e.getPlayer().getWorld())) {
double distanceSquared = e.getTo().distanceSquared(photo.getFrameLocation());
if (distanceSquared > distance) {
VirtualMapManager.hidePlayer(photo, e.getPlayer());
} else {
VirtualMapManager.showPlayer(photo, e.getPlayer());
}
}
for (VirtualVideo virtualVideo : VirtualMapManager.getVideosInWorld(e.getPlayer().getWorld())) {
double distanceSquared = e.getTo().distanceSquared(virtualVideo.getItemframeLocations()[0][0]);
if (distanceSquared > distance) {
VirtualMapManager.hidePlayer(virtualVideo, e.getPlayer());
} else {
VirtualMapManager.showPlayer(virtualVideo, e.getPlayer());
}
}
}
}```
Labels
No labels
bug
dependencies
documentation
duplicate
enhancement
good first issue
help wanted
incompatibility
invalid
needs confirmation
needs more info
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: SBDevelopment/MapReflectionAPI#51
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?