在for循环中,我的目标是破坏其他没有被破坏的玩家。所以,我做了一个新的事件,它的原因是自杀,这样当它破坏玩家时,这个方法就不会被再次调用,最终杀死玩家。我做了我的研究,发现了调用一个新的实体损坏事件EntityDamageEve=new EntityDamageEv(p,DamageCause.SUICIDE,(int)event.getDamage());Bukkit.getServer(). getPluginManager(). all事件(e);
来损坏玩家,但它似乎不起作用。我需要一种替代的方法来损坏我的玩家,但不要一次又一次地调用这个事件。
<code>p.Damage(event.getDamage)放置在内部时,事件循环。
@EventHandler
public void onPlayerDamage(EntityDamageEvent event) {
if(event.getEntity() instanceof Player && event.getCause() != DamageCause.SUICIDE ) {
Player damaged = (Player) event.getEntity();
for(Player p :Bukkit.getOnlinePlayers()) {
if(!p.getName().equalsIgnoreCase(damaged.getName())) {
EntityDamageEvent e = new EntityDamageEvent(p, DamageCause.SUICIDE,(int)event.getDamage());
Bukkit.getServer().getPluginManager().callEvent(e);
//double cHealth =p.getHealth()-event.getDamage();
//p.setHealth(cHealth);
}
}
}
注释代码有效,但当它达到负数时,它不会杀死玩家,它只是将玩家的生命值设置为负数。
将玩家存储到一个集合是一个好主意,但我认为你错过了一些东西。
假设:参与人1 =甜甜圈;玩家2 =煎饼
假设甜甜圈受到损害:
damaged = donut
if(!donut.equals(donut))
false
if(!donut.equals(pancake))
true
if(!playerSet.contains(pancake))
true
playerset.add(pancake);
pancake.damage(event.getDamage());
我们现在损坏了煎饼并将其存储在playerSet中,因为煎饼损坏了,此事件将再次调用
damaged = pancake
if (!pancake.equals(donut))
true
if (!playerSet.contains(donut))
true
playerSet.add(donut);
donut.damage(event.getDamage());
然后它继续。。。
由于损坏的播放器被损坏了两次,因此需要更好的解决方案。
我偶然发现了这个解决方案,添加了playerSet.add(损坏)
@EventHandler
public void onPlayerDamage(EntityDamageEvent event) {
if(event.getEntity() instanceof Player) {
Player damaged = (Player) event.getEntity();
playerSet.add(damaged);
for(Player p :Bukkit.getOnlinePlayers()) {
if(!damaged.equals(p)) {
if(!playerSet.contains(p)) {
playerSet.add(p);
p.damage(event.getDamage());
}
else {
playerSet.remove(p);
}
}
}
}
}
我仍然没有检查此代码中是否有错误,因此请随时指出谢谢。
调用伤害事件不会伤害玩家。事件用于在发生某些事情时通知插件,事件本身不会使任何事情发生。
Damagable#setHealth方法不会调用损坏事件,因此您可以在不重复调用事件的情况下使用它。作为javadocs状态,如果健康小于0,该方法将抛出IllegalArgumentExc的异常,因此只需添加检查即可。
double cHealth = p.getHealth() - event.getDamage();
p.setHealth(cHealth < 0 ? 0 : cHealth);
然而,我不建议使用setHealth方法,因为它不会考虑装甲。要使用Damageable#damage方法而不重复调用损坏事件,您可以将玩家添加到集合中,并检查该玩家是否在集合中。
private Set<Player> playerSet = new HashSet<>();
@EventHandler
public void onPlayerDamage(EntityDamageEvent event) {
if (event.getEntity() instanceof Player) {
Player damaged = (Player) event.getEntity();
if (!playerSet.contains(damaged)) {
for (Player p : Bukkit.getOnlinePlayers()) {
if (!damaged.equals(p)) {
playerSet.add(p);
p.damage(event.getDamage());
}
}
} else {
playerSet.remove(damaged);
}
}
}
在设置ELB健康检查的对话框中,它会声明: 如果实例未通过健康检查,它将自动从负载均衡器中删除。自定义健康检查以满足您的特定需要。 当健康检查失败时,将从ELB后面删除实例。我的问题是围绕“健康门槛”设置。当你悬停在帮助上时,它会说: 在声明EC2实例健康之前连续运行状况检查成功的次数。 如果实例声明为健康的,它是否被拉回负载平衡组?
Spring Cloud Stream为粘合剂提供健康指标。它以binders的名义注册,可以通过设置management.health.binders.enabled属性启用或禁用。
SOFABoot 为 Spring Boot 的健康检查能力增加了 Readiness Check 的能力。如果你需要使用 SOFA 中间件,那么建议使用 SOFABoot 的健康检查能力的扩展,来更优雅的上线应用实例 引入健康检查扩展 要引入 SOFABoot 的健康检查能力的扩展,只需要引入以下的 Starter 即可: <dependency> <groupId>com.alipay
健康检测是对应用进行check,判定应用是否在正常运行。 健康检测有三种方案 只对tcp端口进行检测 只通过http的方式check需要提供path地址 以上两种结合
健康资讯是基于医药吧网开放的 API 健康一问手机平台,该软件完全基于 Sencha Touch 开发。 健康资讯是医药吧网旗下的网站,网站提供免费的 API 接口。同时也提供健康一问、健康知识等。 手机客户运行效果: 也可以通过浏览器访问:http://app.yi18.net/news/index.html Apk下载地址:news_yi18.apk 健康资讯:http://www.oschi