我对代码有问题,因为它不能正常工作。这部分代码在第一个播放器上运行时有效
@EventHandler
public void onMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
if (plugin.getPlayerEvent(player).equals("spleef")) {
if (plugin.getInfo().eventstarted) {
Material b = player.getLocation().getBlock().getType();
if (b.equals(Material.STATIONARY_WATER) || b.equals(Material.WATER) || event.getPlayer().getLocation().getY() <= 0) {
if (!lul.contains(player.getName()) && !ended) {
ended = true;
lul.add(player.getName());
plugin.getMethods().basicLose(player);
}
}
}
}
}
当第二个玩家接触水时,什么也没有发生。没有错误。下面是完整的代码:
package Handlers.EventHandlers.SimpleEvents;
import Mains.MiniEvents;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import java.util.ArrayList;
import java.util.HashSet;
public class Spleef implements Listener {
public final ArrayList<Location> block = new ArrayList<>();
public final ArrayList<Location> block2 = new ArrayList<>();
public static final HashSet<String> lul = new HashSet<>();
public MiniEvents plugin;
public Spleef(MiniEvents plugin) {
this.plugin = plugin;
}
@EventHandler
public void onBreak(final BlockBreakEvent event) {
final Player player = event.getPlayer();
if (plugin.getPlayerEvent(player).equals("spleef")) {
if (plugin.getInfo().sbefore.contains(event.getPlayer().getName())) {
event.setCancelled(true);
} else {
final Block b = event.getBlock();
if (player.getItemInHand() != null && !player.getItemInHand().getType().equals(Material.AIR)) {
if (b.getType().equals(Material.SNOW_BLOCK)) {
event.setCancelled(true);
player.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, 80);
b.setType(Material.AIR);
block.add(b.getLocation());
block2.add(b.getLocation());
} else {
event.setCancelled(true);
}
} else {
event.setCancelled(true);
}
}
}
}
public static boolean ended = false;
@EventHandler
public void onMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
if (plugin.getPlayerEvent(player).equals("spleef")) {
if (plugin.getInfo().eventstarted) {
Material b = player.getLocation().getBlock().getType();
if (b.equals(Material.STATIONARY_WATER) || b.equals(Material.WATER) || event.getPlayer().getLocation().getY() <= 0) {
if (!lul.contains(player.getName()) && !ended) {
ended = true;
lul.add(player.getName());
plugin.getMethods().basicLose(player);
}
}
}
}
}
}
我很确定第二个玩家的“结束”是真的,所以它不会这样做。
这是因为布尔值结束
,您将其设置为 true,但永远无法重置为 false。因此,代码的执行在这里停止:
if (!lul.contains(player.getName()) && !ended) {
因为结束了
现在是真的。
要解决这个问题,您可以使用一个< code>HashMap,一个< code>HashMap存储键的值。不过,你必须确保永远不要在HashMaps中存储玩家对象,因为当玩家离开时,这会导致内存泄漏,所以,你应该使用玩家的UUID(你也可以使用他们的名字,但如果玩家的用户名在1.8中改变,可能会导致错误):
Map<UUID, Boolean> ended = new HashMap<UUID, Boolean>();
要获取值,您可以这样做:
ended.get(player.getUniqueId();
不过,确保在获取HashMap之前检查它是否包含密钥,否则可能会得到NullPointerException:
if(ended.containsKey(player.getUniqueId())
要将值放入地图,您可以使用:
ended.put(player.getUniqueId(), boolean);
所以,你的活动应该是这样的:
public static Map<UUID, Boolean> ended = new HashMap<UUID, Boolean>();
@EventHandler
public void onMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
if (plugin.getPlayerEvent(player).equals("spleef")) {
if (plugin.getInfo().eventstarted) {
Material b = player.getLocation().getBlock().getType();
if (b.equals(Material.STATIONARY_WATER) || b.equals(Material.WATER) || event.getPlayer().getLocation().getY() <= 0) {
boolean end = false;
if(ended.containsKey(player.getUniqueId()){
end = ended.get(player.getUniqueId();
}
//else{} we don't want to do anything if ended does not contain the player's UUID!
if (!lul.contains(player.getName()) && !end){
ended.put(player.getUniqueId(), true);
lul.add(player.getName());
plugin.getMethods().basicLose(player);
}
}
}
}
}
问题内容: 说我的源在我的src /树中(可能在我的测试/树中)。说我只想编译那棵树的 一部分 。我可能要这样做的原因多种多样。仅作为示例,我可能想要创建最小的jar(不包括某些类),或者我想要最快的编译时间来进行编译。我绝对想编译所有依赖项! 可以使用以下命令从命令行轻松实现: 现在,如何使用蚂蚁来做到这一点?javac ant 任务将编译所有内容: 将对源目录和目标目录进行递归扫描,以编译Ja
所以我正在为我的服务器制作一个 kick/ban 命令,格式是 /kick 名称原因。我让它一切工作,但只能是1个单词和任何排除它的东西,例如会说BattleDash被踢了。 这是我的代码: (此外,如果您不包括一个原因,它会在聊天中出现内部错误,并在控制台中发生异常)
请不要使用“if”语句,除非你在解释为什么没有“if”语句是不可能的。
我正在使用linux的Windows子系统,到目前为止,最好的文本编辑器体验是VS Code-内部人员和他们的WSL远程插件。然而,尽管反复努力,我只在复制功能方面取得了部分成功,在我的WSL(zsh)终端中,我可以键入或来打开代码中的目录。我确实有一个功能可以使用,在代码内部人员中打开WSL目录,但它不通过WSL接口,所以我使用的是powershell/windows环境,我想要所有的linux
我想在屏幕的白色部分使用我的主页,正如我在图片中所指示的。 但是,如您所见,标题已经显示在屏幕的左上角。 我该怎么处理? 我只想把屏幕的一半作为一个内容。标题图片和navbar应该保持固定 null null 我如何设置主要部分?
我的python 2.7脚本在我的Ubuntu系统上工作,如果我称之为使用 或从bash脚本使用 但是如果我从Py魅力调用它,我会得到oauth错误,并且从命令提示符 在导入熊猫行抛出一个错误: 我试过了 如Python Pandas中所述,卸载pip,然后为熊猫、Numpy和smpy安装pip-缺少必需的依赖项['Numpy'] 1 上面使用了标志-升级和-用户来尝试让包应用到我的用户帐户而不是