Random teleport when I click on Compass GUI | Spigot 1.15

Discussion in 'Plugin Development' started by WetriZ, Dec 21, 2019.

Thread Status:
Not open for further replies.
  1. Offline

    WetriZ

    A few days ago. I started working on our server GUI. I have a problem. I make this plugin with spigot 1.14.4. But we switched our server to spigot 1.15. In version 1.14.4 is everything working correctly but in 1.15 I have a problem. When I rightclicked the compass it random teleported me and after that it worked fine (the inventory opened and did what it should do). Why is this happening? Do you think this is happening because the version is not matching with the server spigot version? Other plugins works fine.

    My code:
    Code:
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin implements Listener {
    
        public void onEnable(){
            getServer().getPluginManager().registerEvents(this,this);
        }
    
        private void teleportujVeSvete(Player p, int x, int y, int z){
            p.teleport(new Location(p.getWorld(), x, y, z));
        }
    
        private void otevriGUI(Player p){
            Inventory inv = Bukkit.getServer().createInventory(p, 9, ChatColor.DARK_GREEN + "Server Selector");
    
            ItemStack applestore = new ItemStack(Material.APPLE);
            ItemMeta applestoreMeta = applestore.getItemMeta();
    
            ItemStack hlavnispawn = new ItemStack(Material.CRAFTING_TABLE);
            ItemMeta hlavnispawnMeta = hlavnispawn.getItemMeta();
    
            ItemStack radnice = new ItemStack(Material.BOOKSHELF);
            ItemMeta radniceMeta = radnice.getItemMeta();
    
            applestoreMeta.setDisplayName(ChatColor.GRAY + "Apple Store");
            applestore.setItemMeta(applestoreMeta);
    
            hlavnispawnMeta.setDisplayName(ChatColor.GREEN + "Hlavni Spawn");
            hlavnispawn.setItemMeta(hlavnispawnMeta);
    
            radniceMeta.setDisplayName(ChatColor.YELLOW + "Radnice");
            radnice.setItemMeta(radniceMeta);
    
            inv.setItem(2, applestore);
            inv.setItem(4,hlavnispawn);
            inv.setItem(6, radnice);
    
            p.openInventory(inv);
        }
        @EventHandler
        public void onInventoryClick(InventoryClickEvent event){
            if(!ChatColor.stripColor(event.getView().getTitle()).equalsIgnoreCase("Server Selector")) {
                    return;
            }
            Player p = (Player) event.getWhoClicked();
            event.setCancelled(true);
    
            if(event.getCurrentItem() == null || event.getCurrentItem().getType() == Material.AIR || !event.getCurrentItem().hasItemMeta()){
                p.closeInventory();
                return;
            }
    
            switch(event.getCurrentItem().getType()){
                case APPLE:
                    teleportujVeSvete(p, 81, 32, 82);
                    p.closeInventory();
                    p.sendMessage(ChatColor.GOLD + "Byl jsi teleportovan pred " + ChatColor.GRAY + "Apple Store");
                    break;
                case CRAFTING_TABLE:
                    teleportujVeSvete(p, 34, 32, 13);
                    p.closeInventory();
                    p.sendMessage(ChatColor.GOLD + "Byl jsi teleportovan na " + ChatColor.GREEN + "Hlavni Spawn");
                    break;
                case BOOKSHELF:
                    teleportujVeSvete(p, 50, 32, -4);
                    p.closeInventory();
                    p.sendMessage(ChatColor.GOLD + "Byl jsi teleportovan pred " + ChatColor.YELLOW + "Radnici");
                    break;
                default:
                    p.closeInventory();
                    break;
            }
        }
        @EventHandler
        public void onJoin(PlayerJoinEvent event){
            event.getPlayer().getInventory().addItem(new ItemStack(Material.COMPASS));
        }
    
    
    
        @EventHandler
        public void onPlayerInteract(PlayerInteractEvent event){
            Action a = event.getAction();
            ItemStack is = event.getItem();
    
            if(a == Action.PHYSICAL || is == null || is.getType() == Material.AIR)
                return;
    
            if (is.getType() == Material.COMPASS)
                otevriGUI(event.getPlayer());
        }
    
        @EventHandler
        public void onLeave(PlayerQuitEvent event){
            event.getPlayer().getInventory().clear();
        }
    }
    So, after long troubleshooting I have founded a solution. My code is correct. Maybe some other plugin is causing that when you click the compass it will take you through wall. It is not random teleport. I have been taken behind the wall where I had cursor. It can be easily fixed by replacing MATERIAL.COMPASS.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Dec 21, 2019
  2. Offline

    KarimAKL

    @WetriZ I'm pretty sure WorldEdit has that feature, do you have that installed? If so, you should be able to change the material in the config file.
     
Thread Status:
Not open for further replies.

Share This Page