Плагин Minecraft, как я могу исправить мою систему оружия здесь? - PullRequest
0 голосов
/ 21 марта 2020

У меня проблема с моей системой оружия в моем плагине Minecraft.

package me.feist2007.loopcityscript.weapons;

import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Player;

import me.feist2007.loopcityscript.main;
import me.feist2007.loopcityscript.utils.Utils;

public class Pistole extends Weapon{
    static int maxAmmoInClip = 12;
    static int Ammo = 12;
    static int AmmoInClip = 12;
    public Pistole(main plugin, Material material, long reloadTime, double damage) {
        super(plugin, material, reloadTime, damage);

    }


    @Override
    public void shootEffects(Player player) {
        if(this.AmmoInClip > 0) {
        Arrow projectile = player.launchProjectile(Arrow.class);
        projectile.setVelocity(player.getEyeLocation().getDirection().multiply(18));
        projectile.setShooter(player);
    player.getWorld().playSound(player.getLocation(), Sound.ENTITY_IRONGOLEM_HURT, 30, 1);
        this.AmmoInClip = this.AmmoInClip - 1;
    }}


    @Override
    protected void reload(Player player) {
        if(this.Ammo >= this.AmmoInClip) {
            this.AmmoInClip = 12;
            this.Ammo = this.Ammo - 12;
        }

    }


}

Проблема в том, что боеприпасы и перезарядка учитываются для всех игроков на сервере, а не только для одного оружия. Любая идея, как я могу ее кодировать, чтобы перезагрузка и боеприпасы учитывались только для одного оружия

1 Ответ

1 голос
/ 22 марта 2020

Вы устанавливаете Ammo и AmmoInClip в качестве переменных вашего класса, так что любой игрок сможет изменить значения. Я бы порекомендовал вам использовать Map<UUID, Integer>, где вы можете отслеживать уникальные значения каждого игрока. Также в Java имена переменных должны быть lowerCamelCase . Я исправил это в приведенном ниже фрагменте, а также показал, как решить вашу проблему с помощью карты.

    private Map<UUID, Integer> ammoInClipMap = new HashMap<>();

    @Override
    public void shootEffects(Player player) {
        int ammoInClip = ammoInClipMap.getOrDefault(player.getUniqueId(), 12);

        if (ammoInClip > 0) {
            Arrow projectile = player.launchProjectile(Arrow.class);
            projectile.setVelocity(player.getEyeLocation().getDirection().multiply(18));
            projectile.setShooter(player);
            player.getWorld().playSound(player.getLocation(), Sound.ENTITY_IRONGOLEM_HURT, 30, 1);
            ammoInClipMap.put(player.getUniqueId(), ammoInClip - 1);
        }
    }
...