## 依赖信息
### Maven
> ```xml
>
> arcadelabs-mvn-releases
> ArcadeLabs Repository
> https://repo.zorino.in/releases
>
> ```
> ```xml
>
> in.arcadelabs.labaide
> LabAide
> [VERSION]
>
> ```
### Gradle
> ```groovy
> maven {
> url "https://repo.zorino.in/releases"
> }
> ```
> ```groovy
> implementation "in.arcadelabs.labaide:LabAide:[VERSION]"
> ```
## 工具类
```
.
└── in.arcadelabs.labaide
├── cooldown
│ └── CooldownManager
│ └── 冷却管理工具类。
├── experience
│ └── ExperienceManager
│ └── 玩家经验管理工具类。
├── item
│ ├── HeadBuilder
│ │ └── 玩家头颅生成器工具类。
│ └── ItemBuilder
│ └── 项目生成器工具类。
├── logger
│ └── Logger
│ └── 支持 Adventure 组件的 Java 日志记录工具类。
├── metrics
│ └── Bstats
│ └── Bstats 指标追踪器。
├── namespacedkey
│ └── NamespacedKeyBuilder
│ └── NamespacedKey 生成器工具类。
└── randomizer
└── ProbabilityCollection
└── 加权随机化集合工具类。
```
## 示例
> Cooldown.java
```java
int cooldown = 10; //在秒内添加冷却周期
CooldownManager cooldownManager = new CooldownManager(cooldown);
MiniMessage miniMessage = MiniMessage.builder().build();
public void onCraftEvent(final CraftItemEvent event) {
if (!(Objects.equals(event.getRecipe().getResult(), new ItemStack(Material.NETHER_STAR)))) return;
Player player = (Player) event.getWhoClicked();
if (!this.cooldownManager.isOnCooldown(player.getUniqueId())) {
event.getInventory().setResult(new ItemStack(Material.BEACON));
if (this.cooldown >= 0) // int 值 -1 将禁用此项
this.cooldownManager.setCooldown(player.getUniqueId());
} else {
player.sendMessage(this.miniMessage.deserialize("You can't craft beacon for another seconds. ",
Placeholder.component("seconds", Component.text(this.cooldownManager.getRemainingTime(player.getUniqueId())))));
event.setCancelled(true);
}
}
```
> ExperienceManager.java
```java
public void saveXP(final Player player) {
player.getPersistentDataContainer().set(this.lifeSteal.getNamespacedKeyBuilder().getNewKey("player_xp"),
PersistentDataType.INTEGER,
ExperienceManager.getExp(player)); // 获取玩家精确的 XP 数量
player.setExp(0);
player.setLevel(0);
}
public void restoreXP(final Player player) {
if (!(player.getPersistentDataContainer().has(this.lifeSteal.getNamespacedKeyBuilder().getNewKey("player_xp")))) return;
ExperienceManager.changeExp(player,
player.getPersistentDataContainer().get(this.lifeSteal.getNamespacedKeyBuilder().getNewKey("player_xp"),
PersistentDataType.INTEGER));
}
```
> HeadBuilder.java & ItemBulder.java
```java
Logger logger = new Logger("LifeSteal", null, null, null);
HeadBuilder headBuilder = new HeadBuilder(this.logger, Logger.Level.ERROR);
//https://minecraft-heads.com/custom-heads/search?searchword=heart
//向下滚动并检查 'value' 字段,然后将该字段复制并粘贴在此处。
String skullTexture = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmQzNmMzMjkxZmUwMmQxNDJjNGFmMjhkZjJmNTViYjAzOTdlMTk4NTU0ZTgzNDU5OTBkYmJjZDRjMTQwMzE2YiJ9fX0=";
ItemBuilder itemBuilder = new ItemBuilder(Material.PLAYER_HEAD, lifeSteal.getHeadBuilder().createSkullMap(skullTexture))
.setName(Component.text("Heart <3"))
.setLore((List) Component.empty())
.setModelData(389645)
.setPDCObject(this.lifeSteal.getNamespacedKeyBuilder().getNewKey("heart_item"), PersistentDataType.STRING, "No heart spoofing, dum dum.")
.setPDCObject(this.lifeSteal.getNamespacedKeyBuilder().getNewKey("heart_itemtype"), PersistentDataType.STRING, "Cursed")
.setPDCObject(this.lifeSteal.getNamespacedKeyBuilder().getNewKey("heart_itemindex"), PersistentDataType.STRING, "1")
.setPDCObject(this.lifeSteal.getNamespacedKeyBuilder().getNewKey("heart_healthpoints"), PersistentDataType.DOUBLE, "4")
.build();
ItemStack heart = itemBuilder.getBuiltItem();
```
> Logger.java
```java
Logger logger = new Logger("LifeSteal", null, null, null);
try {
somethingStupid();
} catch (StupidException e) {
logger.log(Logger.Level.ERROR, Component.text(e.getMessage(), NamedTextColor.DARK_PURPLE), e.fillInStackTrace());
}
```
> Logger.java
```java
BStats metrics = new BStats(this.instance, resourceID);
```
> NamespacedKeyBuilder.java
```java
NamespacedKeyBuilder namespacedKeyBuilder = new NamespacedKeyBuilder("lifesteal", this.instance);
NamespacedKey namespacedKey = namespacedKeyBuilder.getNewKey("heart_healthpoints");
```
> ProbabilityCollection.java
```java
ProbabilityCollection randomChar = new ProbabilityCollection<>();
randomChar.add('A', 10);
randomChar.add('B', 10);
randomChar.add('C', 10);
randomChar.add('D', 10);
char letter = randomChar.get();
```