gpt4 book ai didi

java - 气泡插件不起作用

转载 作者:行者123 更新时间:2023-12-01 22:09:52 25 4
gpt4 key购买 nike

基本上,我正在尝试创建一个插件,允许某人(具有权限)执行/bubble ,并且无论谁的名字对应于该名称都会被“冒泡”。这个气泡基本上是一个拒绝场(球体),所以每当除了 args[0](气泡的用户名)之外的人都会被快速而突然地抛出。我不知道你是否见过这个,但如果你需要更多的概念证明,mineplex.com 是一个我的世界服务器,它将这个概念实现到了宝箱中。基本上,每当有人点击它时,他们就会被困在一个 1x2 的区域中,每个试图进入 5 个街区的人都会被射出,有点像他们弹跳一样。这是我想出的代码。我不知道为什么这不起作用,没有任何错误,但它不会将它们抛出。

注意:我正在使用一个主类来调用这个类(主类称为“Main”。此外,这个类称为“Bubble”。

编辑:我刚刚更新了代码以使用 HashMap 。它们目前尚未实现,但我想在插件中使用它们。

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
}
}
}
}
}

最佳答案

您忘记添加@EventHandler onPlayerMove之前的注释方法。

您还需要注册PlayerMoveEvent在插件管理器中,将以下代码添加到您的 onEnable()方法:

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

如果您想将玩家的气泡状态存储在 HashMap 中,您需要使用HashMap<UUID, Boolean>字段,您可以在其中存储玩家 UUID 和气泡切换状态。您需要在玩家加入时存储他,并在他退出游戏时将其删除。

关于java - 气泡插件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32019176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com