下面列出了org.bukkit.persistence.PersistentDataContainer#set ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public PotionMeta convert(PotionMeta potionMeta) {
Objects.requireNonNull(potionMeta, "potionMeta");
Duration duration = this.config.duration();
String formattedDuration = this.formatDuration(this.config.duration());
if (this.config.color != null) {
potionMeta.setColor(this.config.color);
}
potionMeta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
potionMeta.setDisplayName(ChatColor.AQUA + this.config.name());
potionMeta.setLore(Collections.singletonList(ChatColor.BLUE + MessageFormat.format(this.config.description(), formattedDuration)));
PersistentDataContainer container = potionMeta.getPersistentDataContainer();
container.set(this.potionKey, PersistentDataType.BYTE, TRUE);
container.set(this.durationSecondsKey, PersistentDataType.INTEGER, (int) duration.getSeconds());
return potionMeta;
}
void tick(Player player) {
Objects.requireNonNull(player, "player");
PersistentDataContainer container = player.getPersistentDataContainer();
if (!container.has(secondsLeftKey, PersistentDataType.INTEGER)) {
return;
}
Integer secondsLeft = container.getOrDefault(secondsLeftKey, PersistentDataType.INTEGER, 0);
if (secondsLeft > 0) {
container.set(secondsLeftKey, PersistentDataType.INTEGER, --secondsLeft);
} else {
container.remove(initialSecondsKey);
container.remove(secondsLeftKey);
}
}
/**
* @param stack
* @param hash
*/
public static void hashIntoInvisibleString(ItemStack stack, String hash) {
ItemMeta meta = stack.getItemMeta();
try {
NamespacedKey key = new NamespacedKey((Plugin) BedwarsAPI.getInstance(), BEDWARS_NAMESPACED_KEY);
PersistentDataContainer container = meta.getPersistentDataContainer();
List<String> propertyLines = new ArrayList<>();
if (container.has(key, PersistentDataType.STRING)) {
String oldString = container.get(key, PersistentDataType.STRING);
propertyLines.addAll((List<String>) new Gson().fromJson(oldString, List.class));
}
propertyLines.add(hash);
container.set(key, PersistentDataType.STRING, new Gson().toJson(propertyLines));
} catch (Throwable ignored) {
// Use the Lore API instead
List<String> lore = meta.hasLore() ? meta.getLore() : new ArrayList<>();
lore.add(convertToInvisibleString(hash));
meta.setLore(lore);
}
stack.setItemMeta(meta);
}
/**
* @param stack
* @param hash
*/
public static void hashIntoInvisibleString(ItemStack stack, String hash) {
ItemMeta meta = stack.getItemMeta();
try {
NamespacedKey key = new NamespacedKey((Plugin) BedwarsAPI.getInstance(), BEDWARS_NAMESPACED_KEY);
PersistentDataContainer container = meta.getPersistentDataContainer();
List<String> propertyLines = new ArrayList<>();
if (container.has(key, PersistentDataType.STRING)) {
String oldString = container.get(key, PersistentDataType.STRING);
propertyLines.addAll((List<String>) new Gson().fromJson(oldString, List.class));
}
propertyLines.add(hash);
container.set(key, PersistentDataType.STRING, new Gson().toJson(propertyLines));
} catch (Throwable ignored) {
// Use the Lore API instead
List<String> lore = meta.hasLore() ? meta.getLore() : new ArrayList<>();
lore.add(convertToInvisibleString(hash));
meta.setLore(lore);
}
stack.setItemMeta(meta);
}
@Override
public PersistentDataContainer toPrimitive(WorldBorderData complex, PersistentDataAdapterContext context) {
PersistentDataContainer persistentDataContainer = context.newPersistentDataContainer();
persistentDataContainer.set(sizeKey, PersistentDataType.DOUBLE, complex.getSize());
complex.applyCenter((x, z) -> {
persistentDataContainer.set(xKey, PersistentDataType.DOUBLE, x);
persistentDataContainer.set(zKey, PersistentDataType.DOUBLE, z);
});
persistentDataContainer.set(damageBufferInBlocksKey, PersistentDataType.DOUBLE, complex.getDamageBuffer());
persistentDataContainer.set(damageAmountKey, PersistentDataType.DOUBLE, complex.getDamageAmount());
persistentDataContainer.set(warningTimeSecondsKey, PersistentDataType.INTEGER, complex.getWarningTimeSeconds());
persistentDataContainer.set(warningDistanceKey, PersistentDataType.INTEGER, complex.getWarningDistance());
return persistentDataContainer;
}
public void setEffect(Entity entity, Effect effect) {
Objects.requireNonNull(entity, "entity");
Objects.requireNonNull(effect, "effect");
PersistentDataContainer container = entity.getPersistentDataContainer();
container.set(this.initialSecondsKey, PersistentDataType.INTEGER, effect.initialSeconds);
container.set(this.secondsLeftKey, PersistentDataType.INTEGER, effect.secondsLeft);
}
public static <T, Z> void setTag(@NotNull ItemStack item, @NotNull String key, Z value, PersistentDataType<T, Z> dataType, boolean useMinecraft) {
ItemMeta meta = item.getItemMeta();
if (meta == null) return;
PersistentDataContainer container = meta.getPersistentDataContainer();
container.set((useMinecraft ? NamespacedKey.minecraft(key) : new NamespacedKey(MineTinker.getPlugin(), key)), dataType, value);
item.setItemMeta(meta);
}
/**
* Toggles an {@link ItemStack} to be Soulbound.<br>
* If true is passed, this will add the {@link #SOULBOUND_LORE} and
* add a {@link NamespacedKey} to the item so it can be quickly identified
* by {@link #isSoulbound(ItemStack)}.<br>
* If false is passed, this property will be removed.
*
* @param item
* The {@link ItemStack} you want to add/remove Soulbound from.
* @param makeSoulbound
* If they item should be soulbound.
*
* @see #isSoulbound(ItemStack)
*/
public static void setSoulbound(ItemStack item, boolean makeSoulbound) {
if (item == null || item.getType() == Material.AIR) {
throw new IllegalArgumentException("A soulbound item cannot be null or air!");
}
boolean isSoulbound = isSoulbound(item);
ItemMeta meta = item.getItemMeta();
if (SlimefunPlugin.getMinecraftVersion().isAtLeast(MinecraftVersion.MINECRAFT_1_14)) {
PersistentDataContainer container = meta.getPersistentDataContainer();
if (makeSoulbound && !isSoulbound) {
container.set(SOULBOUND_KEY, PersistentDataType.BYTE, (byte) 1);
}
if (!makeSoulbound && isSoulbound) {
container.remove(SOULBOUND_KEY);
}
}
List<String> lore = meta.hasLore() ? meta.getLore() : new ArrayList<>();
if (makeSoulbound && !isSoulbound) {
lore.add(SOULBOUND_LORE);
}
if (!makeSoulbound && isSoulbound) {
lore.remove(SOULBOUND_LORE);
}
meta.setLore(lore);
item.setItemMeta(meta);
}
private void modifyAndUpdateWorldData(Player player, Consumer<WorldBorderData> worldBorderDataConsumer) {
PersistentDataContainer persistentDataContainer = player.getPersistentDataContainer();
WorldBorderData worldBorderData = new WorldBorderData();
if (persistentDataContainer.has(worldBorderDataKey, worldBorderDataTagType)) {
worldBorderData = persistentDataContainer.get(worldBorderDataKey, worldBorderDataTagType);
}
worldBorderDataConsumer.accept(worldBorderData);
persistentDataContainer.set(worldBorderDataKey, worldBorderDataTagType, worldBorderData);
}
default void setString(Object obj, NamespacedKey key, String value) {
if (SlimefunPlugin.getMinecraftVersion().isAtLeast(MinecraftVersion.MINECRAFT_1_14) && obj instanceof PersistentDataHolder) {
PersistentDataContainer container = ((PersistentDataHolder) obj).getPersistentDataContainer();
container.set(key, PersistentDataType.STRING, value);
}
}