Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Да.Всем привет. Написал два ивента на кровотечение. Все прекрасно работает, но люди будут умирать быстро, что не очень весело. Вот и назрел этот вопрос.
Можно ли как-то уменьшать 2 сердечка каждые 20 секунд?
new BukkitRunnable() {
public void run() {
player.setHealth(player.getHealth() - 2);
}
}.runTaskTimer(plugin, 1L, 400L);
А какая разница между 400,400 и 1,400? Ведь всёравно он в одно и тоже время будет код выполнять.runTaskTimer(plugin, 1L, 400L);
public void aaa() {
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
@Override
public void run() {
System.out.print("20,20");
}
}, 20L, 20L);
}
public void aaa2() {
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
@Override
public void run() {
System.out.print("1,20");
}
}, 1L, 20L);
}
Ну при запуске сервера запускаешь таймер который будет каждые 20 сек убавлять хп у тех игроков, которые есть в ArrayList или HaspMap.А можно поточнее?
Мне надо так, что если игрок получит травму (неважно какую) то он получит эту проблему и эта проблема будет до тех пор, пока он не заюзает предмет. У меня это все есть, но в виде эффектов, а я хочу заменить эти эффекты, но вот этот метод, правда я вообще не понимаю.
for (Player p : Bukkit.getOnlinePlayers()) {
if (hashmap.contains(p) {
p.setHealth(p.getHealth()-2);
}
}
@EventHandler
public void onBlooding(EntityDamageEvent e) {
if (e.getEntity() instanceof Player) {
final Player p = (Player)e.getEntity();
if(!this.plugin.worlds.contains(p.getWorld().getName())) {
return;
}
if(r.nextInt(100) <= 50) {
if(e.getCause().equals(DamageCause.ENTITY_ATTACK) && p.getLastDamageCause().getDamage() <= 5.0f) {
ml.blooding_players.put(p, "blood");
MessageManager.getManager().msg(p, MsgType.INFORMATION, "Я получил серьезную рану и из нее течет кровь!");
for (Player player : Bukkit.getOnlinePlayers()) {
if (ml.blooding_players.containsKey(player)) {
player.setHealth(player.getHealth()-2);
}
}
}
}
}
}
Ну так цикл токо один раз отрабатывается.for (Player player : Bukkit.getOnlinePlayers()) {
А как изменить переменные, если я уже достал игрока выше.
Покопался, но не работает. Ивент вызывается.
JavaScript:@EventHandler public void onBlooding(EntityDamageEvent e) { if (e.getEntity() instanceof Player) { final Player p = (Player)e.getEntity(); if(!this.plugin.worlds.contains(p.getWorld().getName())) { return; } if(r.nextInt(100) <= 50) { if(e.getCause().equals(DamageCause.ENTITY_ATTACK) && p.getLastDamageCause().getDamage() <= 5.0f) { ml.blooding_players.put(p, "blood"); MessageManager.getManager().msg(p, MsgType.INFORMATION, "Я получил серьезную рану и из нее течет кровь!"); for (Player player : Bukkit.getOnlinePlayers()) { if (ml.blooding_players.containsKey(player)) { player.setHealth(player.getHealth()-2); } } } } } }
А как его повторять до тех пор, пока не юзанешь предмет?Ну так цикл токо один раз отрабатывается.
public void timer() {
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
@Override
public void run() {
}
}, 1L, 20L);
}
@EventHandler
public void onBlooding(EntityDamageEvent e) {
if (e.getEntity() instanceof Player) {
final Player p = (Player)e.getEntity();
if(!this.plugin.worlds.contains(p.getWorld().getName())) {
return;
}
if(r.nextInt(100) <= 50) {
if(e.getCause().equals(DamageCause.ENTITY_ATTACK) && p.getLastDamageCause().getDamage() <= 5.0f) {
ml.blooding_players.put(p, "blood");
MessageManager.getManager().msg(p, MsgType.INFORMATION, "Я получил серьезную рану и из нее течет кровь!");
for (Player player : Bukkit.getOnlinePlayers()) {
if (ml.blooding_players.containsKey(player)) {
player.setHealth(player.getHealth()-2);
}
}
}
}
}
}
ну так надо в сам таймер добавить код, а в евенте только добавлять в мапу.Таймер поставил, но не работает...
Таймер стоит в мейн классе.
Код таймера
JavaScript:public void timer() { Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() { @Override public void run() { } }, 1L, 20L); }
Код ивента:
JavaScript:@EventHandler public void onBlooding(EntityDamageEvent e) { if (e.getEntity() instanceof Player) { final Player p = (Player)e.getEntity(); if(!this.plugin.worlds.contains(p.getWorld().getName())) { return; } if(r.nextInt(100) <= 50) { if(e.getCause().equals(DamageCause.ENTITY_ATTACK) && p.getLastDamageCause().getDamage() <= 5.0f) { ml.blooding_players.put(p, "blood"); MessageManager.getManager().msg(p, MsgType.INFORMATION, "Я получил серьезную рану и из нее течет кровь!"); for (Player player : Bukkit.getOnlinePlayers()) { if (ml.blooding_players.containsKey(player)) { player.setHealth(player.getHealth()-2); } } } } } }
public void timer() {
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
@Override
public void run() {
for (Player player : Bukkit.getOnlinePlayers()) {
if (ml.blooding_players.containsKey(player)) {
player.setHealth(player.getHealth()-2);
}
}
}
}, 1L, 20L);
}
[19:30:26 ERROR]: Could not load 'plugins\Blood.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Abnormal plugin type
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:80) ~[server.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[server.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:329) ~[server.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) [server.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugins(CraftServer.java:292) [server.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:739) [server.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.Bukkit.reload(Bukkit.java:535) [server.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [server.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [server.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) [server.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:627) [server.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:412) [server.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:375) [server.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [server.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [server.jar:git-Spigot-db6de12-18fbb24]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_91]
Caused by: java.lang.InstantiationException: com.blood.api.API
at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_91]
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:76) ~[server.jar:git-Spigot-db6de12-18fbb24]
... 15 more
Caused by: java.lang.NoSuchMethodException: com.blood.api.API.<init>()
at java.lang.Class.getConstructor0(Unknown Source) ~[?:1.8.0_91]
at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_91]
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:76) ~[server.jar:git-Spigot-db6de12-18fbb24]
... 15 more
//
// Decompiled by Procyon v+0.5.29
//
package ru.xtime;
import java.util.ArrayList;
import java.util.Random;
import org.bukkit.Bukkit;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.plugin.java.JavaPlugin;
public class FUCK2 extends JavaPlugin implements Listener,Runnable
{
FUCK2 helper = this;
ArrayList<Player> al = new ArrayList<Player>();
Random r;
public void onEnable() {
r = new Random();
Bukkit.getPluginManager().registerEvents(this, helper);
Bukkit.getScheduler().runTaskTimerAsynchronously(this, helper, 20, 20);
}
@EventHandler
public void onBlooding(EntityDamageEvent e) {
if (e.getEntity().getType() == EntityType.PLAYER) {
final Player p = (Player)e.getEntity();
if(!this.plugin.worlds.contains(p.getWorld().getName())) {
return;
}
if(r.nextInt(100) <= 50) {
if(e.getCause().equals(DamageCause.ENTITY_ATTACK) && p.getLastDamageCause().getDamage() <= 5.0f) {
al.add(p);
MessageManager.getManager().msg(p, MsgType.INFORMATION, "Я получил серьезную рану и из нее течет кровь!");
}
}
}
}
@Override
public void run() {
for (Player player : Bukkit.getOnlinePlayers()) {
if (al.contains(player)) {
player.setHealth(player.getHealth()-2);
}
}
}
}
FUCK2 helper = this;
HashMap<Player, Boolean> al = new HashMap<Player, Boolean>();
Random r;
public void onEnable() {
r = new Random();
Bukkit.getPluginManager().registerEvents(this, helper);
Bukkit.getScheduler().runTaskTimerAsynchronously(this, helper, 20, 20);
}
@EventHandler
public void onBlooding(EntityDamageEvent e) {
if (e.getEntity().getType() == EntityType.PLAYER) {
final Player p = (Player)e.getEntity();
if(!this.plugin.worlds.contains(p.getWorld().getName())) {
return;
}
if(r.nextInt(100) <= 50) {
if(e.getCause().equals(DamageCause.ENTITY_ATTACK) && p.getLastDamageCause().getDamage() <= 5.0f) {
al.put(p, true);
MessageManager.getManager().msg(p, MsgType.INFORMATION, "Я получил серьезную рану и из нее течет кровь!");
}
}
}
}
@Override
public void run() {
for (Player player : Bukkit.getOnlinePlayers()) {
if (al.containsKey(player) && al.get(player)) {
player.setHealth(player.getHealth()-2);
}
}
}
/* Если игрок использовал предмет. al.remove(player) или al.put(player, false) */
так зачем тебе метод timer? Пришли мне в лс папку с исходниками, отредактирую как нужно.Так ругается
The method timer() of type API must override or implement a supertype method