类org.bukkit.persistence.PersistentDataContainer源码实例Demo

下面列出了怎么用org.bukkit.persistence.PersistentDataContainer的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: CraftserveRadiation   文件: LugolsIodinePotion.java
@Override
public boolean test(ItemStack itemStack) {
    Objects.requireNonNull(itemStack, "itemStack");

    if (!itemStack.hasItemMeta()) {
        return false;
    }

    PersistentDataContainer container = itemStack.getItemMeta().getPersistentDataContainer();
    if (container.has(this.potionKey, PersistentDataType.BYTE)) {
        Byte value = container.get(this.potionKey, PersistentDataType.BYTE);
        return value != null && value == TRUE;
    }

    return false;
}
 
源代码2 项目: CraftserveRadiation   文件: LugolsIodinePotion.java
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onPlayerItemConsume(PlayerItemConsumeEvent event) {
    ItemStack item = event.getItem();
    if (!this.test(item)) {
        return;
    }

    PersistentDataContainer container = item.getItemMeta().getPersistentDataContainer();

    int durationSeconds = 0;
    if (container.has(this.durationSecondsKey, PersistentDataType.INTEGER)) {
        durationSeconds = container.getOrDefault(this.durationSecondsKey, PersistentDataType.INTEGER, 0);
    } else if (container.has(this.durationKey, PersistentDataType.INTEGER)) {
        durationSeconds = (int) TimeUnit.MINUTES.toSeconds(container.getOrDefault(this.durationKey, PersistentDataType.INTEGER, 0)); // legacy
    }

    if (durationSeconds <= 0) {
        return;
    }

    Player player = event.getPlayer();
    this.effect.setEffect(player, durationSeconds);
    this.broadcastConsumption(player, durationSeconds);
}
 
源代码3 项目: CraftserveRadiation   文件: LugolsIodinePotion.java
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;
}
 
源代码4 项目: CraftserveRadiation   文件: LugolsIodineEffect.java
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);
    }
}
 
源代码5 项目: BedWars   文件: APIUtils.java
/**
 * @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);
}
 
源代码6 项目: BedWars   文件: APIUtils.java
/**
 * @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);
}
 
源代码7 项目: WorldBorderAPI   文件: WorldBorderDataTagType.java
@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;
}
 
源代码8 项目: WorldBorderAPI   文件: WorldBorderDataTagType.java
@Override
public WorldBorderData fromPrimitive(PersistentDataContainer primitive, PersistentDataAdapterContext context) {

    WorldBorderData worldBorderData = new WorldBorderData();

    get(primitive, sizeKey, PersistentDataType.DOUBLE).ifPresent(worldBorderData::setSize);
    Optional<Double> centerX = get(primitive, xKey, PersistentDataType.DOUBLE);
    Optional<Double> centerZ = get(primitive, zKey, PersistentDataType.DOUBLE);
    if (centerX.isPresent() && centerZ.isPresent()) {
        worldBorderData.setCenter(centerX.get(), centerZ.get());
    }
    get(primitive, damageBufferInBlocksKey, PersistentDataType.DOUBLE).ifPresent(worldBorderData::setDamageBuffer);
    get(primitive, damageAmountKey, PersistentDataType.DOUBLE).ifPresent(worldBorderData::setDamageAmount);
    get(primitive, warningTimeSecondsKey, PersistentDataType.INTEGER).ifPresent(worldBorderData::setWarningTimeSeconds);
    get(primitive, warningDistanceKey, PersistentDataType.INTEGER).ifPresent(worldBorderData::setWarningDistance);

    return worldBorderData;
}
 
源代码9 项目: CraftserveRadiation   文件: LugolsIodineEffect.java
public Effect getEffect(Entity entity) {
    Objects.requireNonNull(entity, "entity");

    PersistentDataContainer container = entity.getPersistentDataContainer();
    int initialSeconds = container.getOrDefault(this.initialSecondsKey, PersistentDataType.INTEGER, -1);
    int secondsLeft = container.getOrDefault(this.secondsLeftKey, PersistentDataType.INTEGER, -1);

    if (initialSeconds != -1 && secondsLeft != -1) {
        return new Effect(initialSeconds, secondsLeft);
    }

    return null;
}
 
源代码10 项目: CraftserveRadiation   文件: LugolsIodineEffect.java
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);
}
 
源代码11 项目: CraftserveRadiation   文件: LugolsIodineEffect.java
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onMilkBucketConsume(PlayerItemConsumeEvent event) {
    if (event.getItem().getType().equals(Material.MILK_BUCKET)) {
        PersistentDataContainer container = event.getPlayer().getPersistentDataContainer();
        container.remove(this.initialSecondsKey);
        container.remove(this.secondsLeftKey);
    }
}
 
源代码12 项目: MineTinker   文件: DataHandler.java
public static <T, Z> boolean hasTag(@NotNull ItemStack item, @NotNull String key, PersistentDataType<T, Z> dataType, boolean useMinecraft) {
    ItemMeta meta = item.getItemMeta();
    if (meta == null) return false;
    PersistentDataContainer container = meta.getPersistentDataContainer();

    return container.has((useMinecraft ? NamespacedKey.minecraft(key) : new NamespacedKey(MineTinker.getPlugin(), key)), dataType);
}
 
源代码13 项目: MineTinker   文件: DataHandler.java
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);
}
 
源代码14 项目: MineTinker   文件: DataHandler.java
public static <T, Z> @Nullable Z getTag(@NotNull ItemStack item, @NotNull String key, PersistentDataType<T, Z> dataType, boolean useMinecraft) {
    ItemMeta meta = item.getItemMeta();
    if (meta == null) return null;

    PersistentDataContainer container = meta.getPersistentDataContainer();
    return container.get((useMinecraft ? NamespacedKey.minecraft(key) : new NamespacedKey(MineTinker.getPlugin(), key)), dataType);
}
 
源代码15 项目: MineTinker   文件: DataHandler.java
public static void removeTag(@NotNull ItemStack item, @NotNull String key, boolean useMinecraft) {
    ItemMeta meta = item.getItemMeta();
    if (meta == null) return;
    PersistentDataContainer container = meta.getPersistentDataContainer();

    container.remove((useMinecraft ? NamespacedKey.minecraft(key) : new NamespacedKey(MineTinker.getPlugin(), key)));
    item.setItemMeta(meta);
}
 
源代码16 项目: Slimefun4   文件: SlimefunUtils.java
/**
 * This method checks whether the given {@link ItemStack} is considered {@link Soulbound}.
 * 
 * @param item
 *            The {@link ItemStack} to check for
 * @return Whether the given item is soulbound
 */
public static boolean isSoulbound(ItemStack item) {
    if (item == null || item.getType() == Material.AIR) {
        return false;
    }
    else {
        ItemMeta meta = item.hasItemMeta() ? item.getItemMeta() : null;

        if (meta != null && SlimefunPlugin.getMinecraftVersion().isAtLeast(MinecraftVersion.MINECRAFT_1_14)) {
            PersistentDataContainer container = meta.getPersistentDataContainer();

            if (container.has(SOULBOUND_KEY, PersistentDataType.BYTE)) {
                return true;
            }
        }

        if (SlimefunPlugin.getThirdPartySupportService().isEmeraldEnchantsInstalled()) {
            // We wanna operate on a copy now
            item = item.clone();

            for (ItemEnchantment enchantment : EmeraldEnchants.getInstance().getRegistry().getEnchantments(item)) {
                EmeraldEnchants.getInstance().getRegistry().applyEnchantment(item, enchantment.getEnchantment(), 0);
            }
        }

        SlimefunItem sfItem = SlimefunItem.getByItem(item);

        if (sfItem instanceof Soulbound) {
            return !sfItem.isDisabled();
        }
        else if (meta != null) {
            return meta.hasLore() && meta.getLore().contains(SOULBOUND_LORE);
        }

        return false;
    }
}
 
源代码17 项目: Slimefun4   文件: SlimefunUtils.java
/**
 * 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);
}
 
源代码18 项目: Slimefun4   文件: PersistentDataService.java
default Optional<String> getString(Object obj, NamespacedKey key) {
    if (SlimefunPlugin.getMinecraftVersion().isAtLeast(MinecraftVersion.MINECRAFT_1_14) && obj instanceof PersistentDataHolder) {
        PersistentDataContainer container = ((PersistentDataHolder) obj).getPersistentDataContainer();
        return Optional.ofNullable(container.get(key, PersistentDataType.STRING));
    }

    return Optional.empty();
}
 
源代码19 项目: WorldBorderAPI   文件: PersistenceWrapper.java
@Override
public IWorldBorder getWorldBorder(Player p) {
    IWorldBorder worldBorder = worldBorderApi.getWorldBorder(p);
    PersistentDataContainer persistentDataContainer = p.getPersistentDataContainer();
    if (persistentDataContainer.has(worldBorderDataKey, worldBorderDataTagType)) {
        applyWorldDataToWorldBorder(worldBorder, persistentDataContainer.get(worldBorderDataKey, worldBorderDataTagType));
    }
    return worldBorder;
}
 
源代码20 项目: WorldBorderAPI   文件: PersistenceWrapper.java
@Override
public void resetWorldBorderToGlobal(Player player) {
    worldBorderApi.resetWorldBorderToGlobal(player);
    PersistentDataContainer persistentDataContainer = player.getPersistentDataContainer();
    if (persistentDataContainer.has(worldBorderDataKey, worldBorderDataTagType)) {
        persistentDataContainer.remove(worldBorderDataKey);
    }
}
 
源代码21 项目: WorldBorderAPI   文件: PersistenceWrapper.java
@Override
public WorldBorderData getWorldBorderData(Player p) {
    PersistentDataContainer persistentDataContainer = p.getPersistentDataContainer();
    if (persistentDataContainer.has(worldBorderDataKey, worldBorderDataTagType)) {
        return persistentDataContainer.get(worldBorderDataKey, worldBorderDataTagType);
    }
    return null;
}
 
源代码22 项目: WorldBorderAPI   文件: PersistenceWrapper.java
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);
}
 
源代码23 项目: Slimefun4   文件: PersistentDataService.java
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);
    }
}
 
源代码24 项目: WorldBorderAPI   文件: WorldBorderDataTagType.java
@Override
public Class<PersistentDataContainer> getPrimitiveType() {
    return PersistentDataContainer.class;
}
 
源代码25 项目: WorldBorderAPI   文件: WorldBorderDataTagType.java
private <T, Z> Optional<Z> get(PersistentDataContainer persistentDataContainer, NamespacedKey namespacedKey, PersistentDataType<T, Z> type) {
    if (persistentDataContainer.has(namespacedKey, type)) {
        return Optional.ofNullable(persistentDataContainer.get(namespacedKey, type));
    }
    return Optional.empty();
}
 
 类所在包
 类方法
 同包方法