我正在为《反恐精英》服务器制作一个插件,以便与朋友一起玩。如何增加武器冷却时间?如果我用 AWP 射击,那就太快了。我对此没有任何想法。
我有一个 java 枚举类 - Gun.java 和 Event 类文件 - PlayerInteractEvent
我正在尝试使用调度程序来启动计时器,但它不起作用。
// Gun.java
package me.imhartash.imhartashguns.Handler;
import me.imhartash.imhartashguns.ImHartashGuns;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.util.RayTraceResult;
public enum Gun {
AKM("AKM", 30, Material.GOLD_INGOT, 10, 20),
GLOCK18("Glock-18", 18, Material.IRON_INGOT, 2, 200);
// 1 - Name, 2 - Bullets, 3 - Material, 4 - Damage
private String name;
private int bulletsNum;
private Material gunMaterial;
private int damage;
private int CD; // Ticks
Gun(String name, int bulletsNum, Material gunMaterial, int damage, int CD) {
this.name = name;
this.bulletsNum = bulletsNum;
this.gunMaterial = gunMaterial;
this.damage = damage;
this.CD = CD;
}
public void shot(ItemStack itemStack, Player player) {
ItemMeta itemMeta = (ItemMeta) itemStack.getItemMeta();
int bullets = itemMeta.getPersistentDataContainer().get(NamespacedKey.fromString("bullets_num"), PersistentDataType.INTEGER);
player.sendMessage(bullets + "");
if (bullets <= 0) {
return;
}
itemMeta.getPersistentDataContainer().set(NamespacedKey.fromString("bullets_num"),
PersistentDataType.INTEGER, bullets - 1);
itemStack.setItemMeta(itemMeta);
// Ray Trace
RayTraceResult rayTrace = player.getLocation().getWorld().rayTraceEntities(
player.getEyeLocation(),
player.getLocation().getDirection(),
100,
e -> e != player && e instanceof LivingEntity
);
if (rayTrace == null) {
return;
}
LivingEntity target = (LivingEntity) rayTrace.getHitEntity();
target.damage(damage);
}
public void reload(ItemStack itemStack) {
ItemMeta itemMeta = (ItemMeta) itemStack.getItemMeta();
itemMeta.getPersistentDataContainer().set(NamespacedKey.fromString("bullets_num"), PersistentDataType.INTEGER, bulletsNum);
itemStack.setItemMeta(itemMeta);
}
public static Gun GetGunByItem(ItemStack itemStack) {
ItemMeta itemMeta;
try {
itemMeta = (ItemMeta) itemStack.getItemMeta();
} catch (NullPointerException exception) {
return null;
}
String name = itemMeta.getPersistentDataContainer().get(NamespacedKey.fromString("name"), PersistentDataType.STRING);
if (name == null) {
return null;
}
Gun gun = valueOf(name);
return gun;
}
public String getName() {
return name;
}
public int getBulletsNum() {
return bulletsNum;
}
public Material getGunMaterial() {
return gunMaterial;
}
public int getDamage() {
return damage;
}
public int getCD() {
return CD;
}
private JavaPlugin plugin;
public void setPlugin(JavaPlugin plugin) {
this.plugin = plugin;
}
}
// OnPlayerInteract.java
package me.imhartash.imhartashguns.Events;
import me.imhartash.imhartashguns.Handler.Gun;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
public class OnPlayerInteract implements Listener {
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) {
Gun gun = Gun.GetGunByItem(event.getItem());
if (gun != null) {
gun.shot(event.getItem(), event.getPlayer());
}
}
}
}
我想你可以创建
Map
,当玩家与某些项目交互时,你将在其中存储刻度(或时间戳),并在下一个交互事件中检查/更新它:
Map