2015-08-14 2 views
0

В основном я пытаюсь создать плагин, который позволяет кому-то (у которого есть perms) делать/пузырь, и имя того, кому имя соответствует этому имени, будет «пузыряться». Этот пузырь в основном является полем отклонения (сферы), поэтому всякий раз, когда кто-то, кроме аргументов [0] (имя пользователя для пузырьков), будет сброшен очень быстро и резко. Я не знаю, видели ли вы когда-либо это, но если вам нужно больше доказательств концепции, myplex.com - это сервер minecraft, который использует эту концепцию в сундуках с сокровищами. В основном, когда кто-то нажимает на это, они попадают в ловушку в области 1x2, и каждый, кто пытается прийти с 5 блоками, получает выстрел, как будто они отскакивают. Вот код, который я придумал. Я не знаю, почему это не работает, ошибок нет, но они не выводят их.Плагин Bubble не работает

ПРИМЕЧАНИЕ. Я использую главный класс, который вызывает этот (главный класс называется «Main» Кроме того, этот класс называется «Bubble»

EDIT:. Я только что обновил код, чтобы использовать HashMaps. Они в настоящее время не реализованы, но я хотел бы использовать их в плагине.

package me.Glowhoo.EpicUtil; 

import java.util.ArrayList; 
import java.util.Collection; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Arrays; 

import org.bukkit.Bukkit; 
import org.bukkit.ChatColor; 
import org.bukkit.Location; 
import org.bukkit.command.Command; 
import org.bukkit.command.CommandExecutor; 
import org.bukkit.command.CommandSender; 
import org.bukkit.entity.Entity; 
import org.bukkit.entity.Player; 
import org.bukkit.event.Listener; 
import org.bukkit.event.player.PlayerMoveEvent; 
import org.bukkit.metadata.FixedMetadataValue; 
import org.bukkit.plugin.Plugin; 
import org.bukkit.util.Vector; 
/* 
* Author = 
* Glowhoo 
* 
*/ 
public class Bubble implements CommandExecutor, Listener { 
private Main plugin; 

public Bubble(Main plugin) 
{ 
    this.plugin = plugin; 
} 
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) 
{ 
    if (cmd.getName().equalsIgnoreCase("bubble")) 
    { 
     if (sender instanceof Player) 
     { 
      if (args.length > 0 && args.length <= 2) 
      { 
      if (Bukkit.getPlayer(args[0]) != null) 
      { //Note: I suck with hashmaps. 
       HashMap<String, Boolean> bubbles = new HashMap<>(); //Attempted to make a hashmap of the player which has the bubble, and if the bubble is on/off. 
       Player victim = (Bukkit.getPlayer(args[0])); 
       Bukkit.broadcastMessage(ChatColor.BOLD.GREEN + victim.getName() + ChatColor.BOLD.DARK_GRAY + " Is now in a bubble!"); 
       FixedMetadataValue metadataValue = new FixedMetadataValue((Plugin)this.plugin, true); 
       victim.setMetadata("isInBubble", metadataValue); 


       if (args[1].equalsIgnoreCase("on")) //i.e /bubble <username> <on/off> 
       { 
       bubbles.put(args[0], true); 
       }else if (args[1].equalsIgnoreCase("off")) 
       { 
        bubbles.put(args[0], false); 
       } 


      } 
      else 
      { 
       sender.sendMessage(ChatColor.RED + "Player is not online!"); 

      } 

      } 
      else 
      { 
       sender.sendMessage(ChatColor.RED + "Invalid arguments!"); 
      } 


     } 
     else 
     { 
      sender.sendMessage(ChatColor.AQUA + "The console cannot bubble someone!"); 
     } 

    } 



    return false; 
} 
public void onPlayerMove(PlayerMoveEvent e) { 
    Player mover = e.getPlayer(); 
    Location from = e.getFrom(); 
    Location to = e.getTo(); 
    Collection<Entity> nearbyEntities = mover.getWorld(). 
    getNearbyEntities(from, 10, 10, 10);//Get entities in a 10 block square from loc "from" 
    List<Player> nearbyPlayers = new ArrayList<Player>(); 
    for (Entity en : nearbyEntities) { 
     if (en instanceof Player) 
      nearbyPlayers.add((Player) en); 
    } 
    for (Player victim : nearbyPlayers) { 
     if (victim.hasMetadata("isInBubble") && victim != mover) { 
      Location victimLoc = victim.getLocation(); 
      if (victimLoc.distance(to) <= 5) {//Radius 5 
       e.setCancelled(true); //Cancel so cant move 
       return; //we have nothing left no need to get in for statement again 
      } 
      } 
     } 
    } 
} 

ответ

3

Вы забыли добавить @EventHandler аннотации перед тем onPlayerMove метода.

Вы также должны зарегистрировать PlayerMoveEvent в менеджере плагинов, поэтому добавьте следующий код в ваш метод onEnable():

getServer().getPluginManager().registerEvents(this, new Bubble()); 

Если вы хотите сохранить пузырь статусы на игроков в HashMap, вам нужно использовать HashMap<UUID, Boolean> поле, где хранятся проигрывателя UUID и статус переключателя с пузырьками. Вам нужно сохранить плеер, когда он присоединяется и убирает его, когда он покидает игру.

+1

Вы также можете использовать 'ArrayList ' вместо 'HashMap '. Вместо того, чтобы установить значение HashMap равным false, удалите из списка, а вместо того, чтобы значение HashMap присвоено true, добавьте в список. – Jojodmo

Смежные вопросы