
studio.magemonkey.sapphire.DarkRiseItems Maven / Gradle / Ivy
The newest version!
package studio.magemonkey.sapphire;
import org.apache.commons.lang3.Validate;
import org.bukkit.Material;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import studio.magemonkey.codex.legacy.riseitem.DarkRiseItem;
import studio.magemonkey.codex.legacy.riseitem.DarkRiseItemImpl;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
public class DarkRiseItems {
private static final String ALLOWED_CHARS = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM -_.";
private final File dataFile = new File(Sapphire.getInstance().getDataFolder(), "items");
private final Map itemsById = new ConcurrentHashMap<>(200);
private final Map itemFiles = new ConcurrentHashMap<>(200);
private final Map itemsByName = new ConcurrentHashMap<>(200);
private final SortedMap sortedItems = Collections.synchronizedSortedMap(new TreeMap<>());
public Collection getItems() {
return this.itemsById.values();
}
public SortedMap getSortedMap() {
return this.sortedItems;
}
public DarkRiseItem addItem(String fileName, DarkRiseItem item, boolean save) {
Validate.notNull(item, "Item can't be null");
if (!fileName.toLowerCase().endsWith(".yml"))
fileName = fileName + ".yml";
StringBuilder sb = new StringBuilder(fileName.length());
for (char c : fileName.toCharArray()) {
if ("1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM -_.".indexOf(c) != -1)
sb.append(c);
}
File file = new File(this.dataFile, sb.toString());
return addItem(file, item, save);
}
public DarkRiseItem addItem(File file, DarkRiseItem item, boolean save) {
Validate.notNull(item, "Item can't be null");
String lowerId = item.getId().toLowerCase().intern();
if (file != null)
this.itemFiles.put(lowerId, file);
this.itemsByName.put(item.getName().toLowerCase().intern(), item);
this.itemsById.put(lowerId, item);
this.sortedItems.put(item.getId(), item);
if (save)
Sapphire.getInstance()
.getServer()
.getScheduler()
.runTaskAsynchronously(Sapphire.getInstance(), this::saveItems);
return item;
}
public boolean removeItem(DarkRiseItem item, boolean save) {
if (item == null)
return false;
DarkRiseItem remove = this.itemsById.remove(item.getId().toLowerCase());
if (remove == null)
return false;
File file = this.itemFiles.remove(item.getId().toLowerCase());
if (file != null) {
YamlConfiguration yaml = YamlConfiguration.loadConfiguration(file);
Collection items = yaml.getMapList("items")
.stream()
.map(m -> new DarkRiseItemImpl((Map) m))
.collect(Collectors.toSet());
items.remove(item);
if (items.isEmpty()) {
if (!file.delete())
file.deleteOnExit();
} else {
Collection
© 2015 - 2025 Weber Informatics LLC | Privacy Policy