- Баллы
- 66
- Имя в Minecraft
- GoodPlayer
<удалено>
Последнее редактирование:
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
а нам остается лишь догадываться, какую ты ошибку словилтолько получил ошибку в консоль
Ошибся, ошибки нет, но задержка не выдаётся.а нам остается лишь догадываться, какую ты ошибку словил
да, конечноBukkit.getServer().getPluginManager().registerEvents(new YourClass(), this);
Эта строка в onEnable() есть?
Я бы на твоём месте сделал какой-нибудь метод, а-ля getOwningPlayer:Нашёл баг в своём плагина на антирелог. Когда игрок попадает в игрока с лука ему не даётся задержка (КД). Вот код обычного пвп (от руки игрока):
Посидев я решил сделать так:Код:@EventHandler public void onPvP(EntityDamageByEntityEvent e) { if (!(e.getDamager() instanceof Player) || !(e.getEntity() instanceof Player) || !handlePvp(e.getEntity().getLocation())) return; Player damager = (Player)e.getDamager(); Player player = (Player)e.getEntity(); if (!playerInPvp(damager)) damager.sendMessage(toColorMsg("messages.pvp-start")); if (!playerInPvp(player)) player.sendMessage(toColorMsg("messages.pvp-start")); this.lastPlayerPvP.put(damager, Long.valueOf(System.currentTimeMillis())); this.lastPlayerPvP.put(player, Long.valueOf(System.currentTimeMillis())); if (!this.playersInPvp.contains(damager)) this.playersInPvp.add(damager); if (!this.playersInPvp.contains(player)) this.playersInPvp.add(player); }
В итоге ничего из этого не вышло, только получил ошибку в консоль. Подскажите, пожалуйста, как это решить?Код:@EventHandler public void onProjectile(ProjectileHitEvent e) { if (!(e.getEntity().getShooter() instanceof Player) || !(e.getEntity() instanceof Player)) return; Player damager = (Player)e.getEntity().getShooter(); Player player = (Player)e.getEntity(); if (!playerInPvp(damager)) damager.sendMessage(toColorMsg("messages.pvp-start")); if (!playerInPvp(player)) player.sendMessage(toColorMsg("messages.pvp-start")); this.lastPlayerPvP.put(damager, Long.valueOf(System.currentTimeMillis())); this.lastPlayerPvP.put(player, Long.valueOf(System.currentTimeMillis())); if (!this.playersInPvp.contains(damager)) this.playersInPvp.add(damager); if (!this.playersInPvp.contains(player)) this.playersInPvp.add(player); }
public static @Nullable Player getOwningPlayer(@Nullable Entity entity) {
if (entity == null) return null; // Нет сущности - нет проблем
if (entity instanceof Player player) { // Если сущность уже игрок
return player;
}
if (entity instanceof Projectile proj) { // Если сущность - снаряд
ProjectileSource source = proj.getSource();
return (source instanceof Player player) ? player : null; // Проверяем, владелец ли игрок
}
if (entity instanceof Tameable tame) { // Если сущность - волк или типа того
AnimalTamer tamer = tame.getOwner();
return (tamer instanceof Player player) ? player : null; // Проверяем, владелец ли игрок
}
return null; // У сущности нет владельца
}
Player damager = getOwningPlayer(event.getDamager());
if (damager == null) return;
Спасибо, попробовал, но я так понимаю, что метода getSource() нет в 1.12.2? Можно ли его заменить каким-то другим методом?Я бы на твоём месте сделал какой-нибудь метод, а-ля getOwningPlayer:
И просто где-нибудь в начале обработки EntityDamageByEntityEvent вписать:PHP:public static @Nullable Player getOwningPlayer(@Nullable Entity entity) { if (entity == null) return null; // Нет сущности - нет проблем if (entity instanceof Player player) { // Если сущность уже игрок return player; } if (entity instanceof Projectile proj) { // Если сущность - снаряд ProjectileSource source = proj.getSource(); return (source instanceof Player player) ? player : null; // Проверяем, владелец ли игрок } if (entity instanceof Tameable tame) { // Если сущность - волк или типа того AnimalTamer tamer = tame.getOwner(); return (tamer instanceof Player player) ? player : null; // Проверяем, владелец ли игрок } return null; // У сущности нет владельца }
PHP:Player damager = getOwningPlayer(event.getDamager()); if (damager == null) return;
*getShooterСпасибо, попробовал, но я так понимаю, что метода getSource() нет в 1.12.2? Можно ли его заменить каким-то другим методом?
Спасибо, работает, но теперь при нанесении удара не игрока, а мобу возникает такая ошибка:*getShooter
[20:07:25 ERROR]: Could not pass event EntityDamageByEntityEvent to test v1.0
org.bukkit.event.EventException: null
at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:72) ~[patched_1.12.2.jar:git-Paper-1620]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:78) ~[patched_1.12.2.jar:git-Paper-1620]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[patched_1.12.2.jar:git-Paper-1620]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:513) ~[patched_1.12.2.jar:git-Paper-1620]
at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.callEvent(CraftEventFactory.java:94) ~[patched_1.12.2.jar:git-Paper-1620]
at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:620) ~[patched_1.12.2.jar:git-Paper-1620]
at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:523) ~[patched_1.12.2.jar:git-Paper-1620]
at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.handleLivingEntityDamageEvent(CraftEventFactory.java:652) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.EntityLiving.damageEntity0(EntityLiving.java:1415) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.EntityLiving.damageEntity(EntityLiving.java:888) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.EntityMonster.damageEntity(EntityMonster.java:44) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.EntityZombie.damageEntity(EntityZombie.java:163) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.EntityArrow.a(EntityArrow.java:295) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.EntityArrow.B_(EntityArrow.java:203) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.EntityTippedArrow.B_(EntityTippedArrow.java:86) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.World.entityJoinedWorld(World.java:1797) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.World.h(World.java:1767) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.World.tickEntities(World.java:1574) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.WorldServer.tickEntities(WorldServer.java:682) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:921) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:423) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:774) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:666) ~[patched_1.12.2.jar:git-Paper-1620]
at java.lang.Thread.run(Thread.java:842) [?:?]
Caused by: java.lang.ClassCastException: class org.bukkit.craftbukkit.v1_12_R1.entity.CraftZombie cannot be cast to class org.bukkit.entity.Player (org.bukkit.craftbukkit.v1_12_R1.entity.CraftZombie and org.bukkit.entity.Player are in unnamed module of loader 'app')
at ru.test.test.main.onPvP(Manager.java:118) ~[?:?]
at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor20.execute(Unknown Source) ~[?:?]
at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:70) ~[patched_1.12.2.jar:git-Paper-1620]
... 23 more
Логично, что надо проверять является энтити игроком или нет.Спасибо, работает, но теперь при нанесении удара не игрока, а мобу возникает такая ошибка:
Код:[20:07:25 ERROR]: Could not pass event EntityDamageByEntityEvent to test v1.0 org.bukkit.event.EventException: null at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:72) ~[patched_1.12.2.jar:git-Paper-1620] at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:78) ~[patched_1.12.2.jar:git-Paper-1620] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[patched_1.12.2.jar:git-Paper-1620] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:513) ~[patched_1.12.2.jar:git-Paper-1620] at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.callEvent(CraftEventFactory.java:94) ~[patched_1.12.2.jar:git-Paper-1620] at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:620) ~[patched_1.12.2.jar:git-Paper-1620] at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:523) ~[patched_1.12.2.jar:git-Paper-1620] at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.handleLivingEntityDamageEvent(CraftEventFactory.java:652) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.EntityLiving.damageEntity0(EntityLiving.java:1415) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.EntityLiving.damageEntity(EntityLiving.java:888) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.EntityMonster.damageEntity(EntityMonster.java:44) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.EntityZombie.damageEntity(EntityZombie.java:163) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.EntityArrow.a(EntityArrow.java:295) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.EntityArrow.B_(EntityArrow.java:203) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.EntityTippedArrow.B_(EntityTippedArrow.java:86) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.World.entityJoinedWorld(World.java:1797) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.World.h(World.java:1767) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.World.tickEntities(World.java:1574) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.WorldServer.tickEntities(WorldServer.java:682) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:921) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:423) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:774) ~[patched_1.12.2.jar:git-Paper-1620] at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:666) ~[patched_1.12.2.jar:git-Paper-1620] at java.lang.Thread.run(Thread.java:842) [?:?] Caused by: java.lang.ClassCastException: class org.bukkit.craftbukkit.v1_12_R1.entity.CraftZombie cannot be cast to class org.bukkit.entity.Player (org.bukkit.craftbukkit.v1_12_R1.entity.CraftZombie and org.bukkit.entity.Player are in unnamed module of loader 'app') at ru.test.test.main.onPvP(Manager.java:118) ~[?:?] at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor20.execute(Unknown Source) ~[?:?] at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:70) ~[patched_1.12.2.jar:git-Paper-1620] ... 23 more
Логично, что надо проверять является энтити игроком или нет.
if (!(e.getEntity() instanceof Player))
return;
Чуть переработал метод, исправил ошибку. Всем спасибо, кто помогал <3Проверяю таким образом, но ошибка остаётся. Проверял и напрямую в самом ивенте и в самом методе.Код:if (!(e.getEntity() instanceof Player)) return;