В основном я пытаюсь создать плагин, который позволяет кому-то (у которого есть 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
}
}
}
}
}
Вы также можете использовать 'ArrayList' вместо 'HashMap '. Вместо того, чтобы установить значение HashMap равным false, удалите из списка, а вместо того, чтобы значение HashMap присвоено true, добавьте в список. –
Jojodmo