Map gets destroyed on Interaction although the InteractionEvent is canceled #51

Open
opened 2025-05-29 12:06:54 +02:00 by JustDxniel · 0 comments

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());
            }
        }
    }

}```
```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()); } } } }```
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: SBDevelopment/MapReflectionAPI#51
No description provided.