- Баллы
- 96
Чёт печаль
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Раздели if, сперва проверь есть там дамагер, или он нулл.Чёт печаль
Пару секРаздели if, сперва проверь есть там дамагер, или он нулл.
Я пока что так проверил.Раздели if, сперва проверь есть там дамагер, или он нулл.
Bukkit.broadcastMessage(CHAT_PREFIX + "[Debug] " + event.getDamager().getType().toString());
Bukkit.broadcastMessage(CHAT_PREFIX + "[Debug] " + event.getEntity().getType().toString());
Подпись читай.Бле, может в скайп тогда? Может помогу.
CraftEntity cen = (CraftEntity) event.getDamager();Пару сек
Я пока что так проверил.
Java:Bukkit.broadcastMessage(CHAT_PREFIX + "[Debug] " + event.getDamager().getType().toString()); Bukkit.broadcastMessage(CHAT_PREFIX + "[Debug] " + event.getEntity().getType().toString());![]()
Я это сразу проверял, суть в этом и есть. Дамагер == ЭНТИТИ, который нанёс урон, т.е. не тот, кто его инициировал, а именно то, что нанесло урон, а просто энтити == жертва.
Подпись читай.
В процессе пока что.CraftEntity cen = (CraftEntity) event.getDamager();
net.minecraft.server.v1_6_R3.Entity en = cen.getHandle();
en твоя пуля.
P.s чтоб скомпилить, собирай с крафтведром и те будет импорт к net.minecraft.server.v1_6_R3.Entity
Я полагаю вопрос решен? Получил ты свою nmsпулю?
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (plugin.isDebug) {
Bukkit.broadcastMessage("[Debug] call EntityDamageByEntityEvent");
}
Player p;
Entity entity = event.getDamager();
if (entity != null) {
CraftEntity cen = (CraftEntity) event.getDamager();
net.minecraft.server.v1_6_R3.Entity en = cen.getHandle();
Bukkit.broadcastMessage(CHAT_PREFIX + "[Debug] Class name" + en.getClass().getName());
if (en.getClass().getName().endsWith("EntityBullet")) {
Entity owner = getField(en.getClass(), en, "owner"); // Caused by: java.lang.ClassCastException: net.minecraft.entity.player.EntityPlayerMP cannot be cast to org.bukkit.entity.Entity. Качаю другое ядро.
if (owner instanceof Player) {
p = (Player) owner;
Bukkit.broadcastMessage(CHAT_PREFIX + "[Debug] Owner name" + p.getName());
}
} else if (entity.getType() == EntityType.PLAYER) {
p = (Player) entity;
if (isAccess(p)) {
if (plugin.isDebug) {
p.sendMessage("[Debug] PvP: false");
}
p.addPotionEffect(blindness);
p.sendMessage(CHAT_PREFIX + ChatColor.RED + "Вы не можете наносить повреждения кому-либо с безопасной зоны!");
event.setCancelled(true);
}
} else if (entity instanceof Projectile) {
LivingEntity livingentity = ((Projectile) entity).getShooter();
if (livingentity.getType() == EntityType.PLAYER) {
p = (Player) livingentity;
if (isAccess(p)) {
if (plugin.isDebug) {
p.sendMessage("[Debug] PvP: false");
}
p.addPotionEffect(blindness);
p.sendMessage(CHAT_PREFIX + ChatColor.RED + "Вы не можете наносить повреждения кому-либо с безопасной зоны!");
event.setCancelled(true);
}
}
}
} else {
Bukkit.broadcastMessage(CHAT_PREFIX + "[Debug] attacker is not player");
}
}
А просто cen.remove(); не катит?В процессе пока что.
Java:@EventHandler public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { if (plugin.isDebug) { Bukkit.broadcastMessage("[Debug] call EntityDamageByEntityEvent"); } Player p; Entity entity = event.getDamager(); if (entity != null) { CraftEntity cen = (CraftEntity) event.getDamager(); net.minecraft.server.v1_6_R3.Entity en = cen.getHandle(); Bukkit.broadcastMessage(CHAT_PREFIX + "[Debug] Class name" + en.getClass().getName()); if (en.getClass().getName().endsWith("EntityBullet")) { Entity owner = getField(en.getClass(), en, "owner"); // Caused by: java.lang.ClassCastException: net.minecraft.entity.player.EntityPlayerMP cannot be cast to org.bukkit.entity.Entity. Качаю другое ядро. if (owner instanceof Player) { p = (Player) owner; Bukkit.broadcastMessage(CHAT_PREFIX + "[Debug] Owner name" + p.getName()); } } else if (entity.getType() == EntityType.PLAYER) { p = (Player) entity; if (isAccess(p)) { if (plugin.isDebug) { p.sendMessage("[Debug] PvP: false"); } p.addPotionEffect(blindness); p.sendMessage(CHAT_PREFIX + ChatColor.RED + "Вы не можете наносить повреждения кому-либо с безопасной зоны!"); event.setCancelled(true); } } else if (entity instanceof Projectile) { LivingEntity livingentity = ((Projectile) entity).getShooter(); if (livingentity.getType() == EntityType.PLAYER) { p = (Player) livingentity; if (isAccess(p)) { if (plugin.isDebug) { p.sendMessage("[Debug] PvP: false"); } p.addPotionEffect(blindness); p.sendMessage(CHAT_PREFIX + ChatColor.RED + "Вы не можете наносить повреждения кому-либо с безопасной зоны!"); event.setCancelled(true); } } } } else { Bukkit.broadcastMessage(CHAT_PREFIX + "[Debug] attacker is not player"); } }
Так овнера же пули не получил ещё ClassCastException.А просто cen.remove(); не катит?
Игрок, гет локатионс. Не думаю, что он успеет так быстро перебежать.Так овнера же пули не получил ещё ClassCastException.
Надо же определить, от куда была выпущена))
Не понял, гетлокакейшен чего? Пули? Не врубился чёт. Игрока то нет ещё, кого от куда брать?Хотя по твоим словам ивент там имеется и event.setCancelled(true); должен сработать.
Игрок, гет локатионс. Не думаю, что он успеет так быстро перебежать.
Ну ты же пулю получил и с него игрока, не?Не понял, гетлокакейшен чего? Пули? Не врубился чёт. Игрока то нет ещё, кого от куда брать?
Ну ты же пулю получил и с него игрока, не?
Ах да, ты не забыл сконвертить nmsентити в ведроентити? Или дергай координаты прям из nms.
net.minecraft.server.v1_10_R1.Entity nmsen = твой nms ентити
Вот так удалось получить владельца пули. Что скажете?net.minecraft.server.v1_10_R1.Entity nmsen = твой nms ентити
Entity craften = nmsen.getBukkitEntity(); Конвертим в ведроентити.
Ну а дальше кастует в Player
if (entity != null) {
CraftEntity cen = (CraftEntity) event.getDamager();
net.minecraft.server.v1_6_R3.Entity en = cen.getHandle();
Bukkit.broadcastMessage(CHAT_PREFIX + "[Debug] Class name" + en.getClass().getName());
if (en.getClass().getName().endsWith("EntityBullet")) { //en.getBukkitEntity();
CraftEntity owner = CraftEntity.getEntity((CraftServer) entity.getServer(), (net.minecraft.server.v1_6_R3.Entity) getField(en.getClass(), en, "owner"));
if (owner instanceof Player) {
p = (Player) owner;
Bukkit.broadcastMessage(CHAT_PREFIX + "[Debug] Owner name" + p.getName());
}
nmsen.getBukkitEntity(); так правильней.Вот так удалось получить владельца пули. Что скажете?
Java:if (entity != null) { CraftEntity cen = (CraftEntity) event.getDamager(); net.minecraft.server.v1_6_R3.Entity en = cen.getHandle(); Bukkit.broadcastMessage(CHAT_PREFIX + "[Debug] Class name" + en.getClass().getName()); if (en.getClass().getName().endsWith("EntityBullet")) { //en.getBukkitEntity(); CraftEntity owner = CraftEntity.getEntity((CraftServer) entity.getServer(), (net.minecraft.server.v1_6_R3.Entity) getField(en.getClass(), en, "owner")); if (owner instanceof Player) { p = (Player) owner; Bukkit.broadcastMessage(CHAT_PREFIX + "[Debug] Owner name" + p.getName()); }
Дык мы получим пулю по тому, что ты написал, а в той строке через рефлексию мы ещё получаем овнера.nmsen.getBukkitEntity(); так правильней.
Ну да, он и есть net.minecraft.server.v1_10_R1.Entity как и пуля, в нем есть метод getBukkitEntity();Дык мы получим пулю по тому, что ты написал, а в той строке через рефлексию мы ещё получаем овнера.
Так, я совсем перестал понимать.Ну да, он и есть net.minecraft.server.v1_10_R1.Entity как и пуля, в нем есть метод getBukkitEntity();
net.minecraft.server.v1_6_R3.Entity пуля = cen.getHandle();Так, я совсем перестал понимать.
У нас есть оригинальный Entity (сама пуля) . В моём коде с помощью рефлексии мы достоём овнера и получаем его на сервере, далее проверяем, что он игрок и делаем то, что нам нужно. Вашу идею не могу понять.
Можете кодом показать?
Уже сделали эту фигню. Вариант рабочий.net.minecraft.server.v1_6_R3.Entity пуля = cen.getHandle();
net.minecraft.server.v1_6_R3.Entity игрок = getField(en.getClass(), пуля, "owner"));
Entity крафтигрок = игрок.getBukkitEntity();
if (крафтигрок instanceof Player) {
p = (Player) крафтигрок;
}
Entity крафтигрок = игрок.getBukkitEntity();