Счетчик посещений учитывается дважды в плагине PaperMC ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Счетчик посещений учитывается дважды в плагине PaperMC

Сообщение Anonymous »

Я работаю над плагином 1.19.4 PaperMC, который подсчитывает попадания для суператаки. Моя проблема в том, что когда я нажимаю на объект, удар засчитывается как два. Счетчик попаданий необходим для активации суператаки, которая активируется, когда количество попаданий достигает 20.
Вот соответствующий код для метода подсчета попаданий:

Код: Выделить всё

@EventHandler
public void onEntityDamage(EntityDamageByEntityEvent event) {

// Sprawdzanie czy zadający jest graczem
if (!(event.getDamager() instanceof Player)) {
return;
}

Player player = (Player) event.getDamager();
ItemStack item = player.getInventory().getItemInMainHand();

if (item == null || item.getType() != Material.NETHERITE_AXE || !item.getItemMeta().hasDisplayName() || !item.getItemMeta().getDisplayName().equals(WEAPON_NAME)) {
return;
}

if (player.getAttackCooldown() < 0.9) return;

UUID playerId = player.getUniqueId();
// Sprawdź, czy gracz trzyma przedmiot w głównej ręce
if (player.getInventory().getItemInMainHand() != null && player.getInventory().getItemInMainHand().getType() != Material.AIR) {
int hits = hitCounter.getOrDefault(playerId, 0) + 1;

// Zaktualizuj licznik hitów
hitCounter.put(playerId, hits);

long currentTime = System.currentTimeMillis();
long lastHit = lastHitTime.getOrDefault(playerId, 0L);

// Jeśli atak był zbyt szybko po poprzednim ataku, nie licz go
if (currentTime - lastHit < HIT_INTERVAL) return;

lastHitTime.put(playerId, currentTime);
updateActionBar(player, hits);

// Sprawdzanie czy jest wystarczająca ilość hitów na super atak
if (hits >= 20 && !superAttackReady.getOrDefault(playerId, false)) {
superAttackReady.put(playerId, true);
player.sendMessage(slMessageCustom + ChatColor.GREEN + "ꜱᴜᴘᴇʀ ᴀᴛᴀᴋ ɢᴏᴛᴏᴡʏ! ᴋʟɪᴋɴɪᴊ ᴘᴘᴍ ᴀʙʏ ᴀᴋᴛʏᴡᴏᴡᴀᴄ.");
}

// Dodawanie efektu withera graczom podczas super ataku
if (isSuperAttackActive(player) && event.getEntity() instanceof LivingEntity) {
LivingEntity target = (LivingEntity) event.getEntity();
target.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 80, 1));
}
}
}
Я хочу знать, почему мои попадания засчитываются дважды.

Подробнее здесь: https://stackoverflow.com/questions/791 ... rmc-plugin

Вернуться в «JAVA»