97 lines
3.3 KiB
Java
97 lines
3.3 KiB
Java
package tc.oc.pgm.spawns;
|
|
|
|
import java.io.IOException;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.util.Locale;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
import javax.annotation.Nullable;
|
|
import javax.inject.Inject;
|
|
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.configuration.Configuration;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.permissions.Permissible;
|
|
import org.jdom2.JDOMException;
|
|
import org.jdom2.input.SAXBuilder;
|
|
import tc.oc.commons.bukkit.configuration.ConfigUtils;
|
|
import tc.oc.commons.bukkit.item.ItemBuilder;
|
|
import tc.oc.commons.bukkit.localization.Translations;
|
|
import tc.oc.commons.core.localization.LocaleMap;
|
|
import tc.oc.commons.core.logging.Loggers;
|
|
import tc.oc.pgm.kits.GlobalItemParser;
|
|
import tc.oc.pgm.xml.InvalidXMLException;
|
|
|
|
/**
|
|
* Creates some of the items for the observer hotbar
|
|
*/
|
|
public class ObserverToolFactory {
|
|
|
|
public static final String EDIT_WAND_PERMISSION = "worldedit.wand";
|
|
|
|
private final Logger logger;
|
|
private final Configuration config;
|
|
private final SAXBuilder saxBuilder;
|
|
private final GlobalItemParser itemParser;
|
|
|
|
private final LocaleMap<ItemStack> howToBooks = new LocaleMap<>();
|
|
|
|
@Inject private ObserverToolFactory(Loggers loggers, Configuration config, SAXBuilder saxBuilder, GlobalItemParser itemParser) {
|
|
this.saxBuilder = saxBuilder;
|
|
this.logger = loggers.get(getClass());
|
|
this.config = config;
|
|
this.itemParser = itemParser;
|
|
}
|
|
|
|
public ItemStack getTeleportTool(Player player) {
|
|
return new ItemBuilder()
|
|
.material(Material.COMPASS)
|
|
.name(ChatColor.BLUE.toString() + ChatColor.BOLD + Translations.get().t("teleportTool.displayName", player))
|
|
.get();
|
|
}
|
|
|
|
public ItemStack getEditWand(Player player) {
|
|
return new ItemBuilder()
|
|
.material(Material.RABBIT_FOOT)
|
|
.name(ChatColor.DARK_PURPLE.toString() + ChatColor.BOLD + Translations.get().t("editWand.displayName", player))
|
|
.get();
|
|
}
|
|
|
|
public boolean canUseEditWand(Permissible permissible) {
|
|
return permissible.hasPermission(EDIT_WAND_PERMISSION);
|
|
}
|
|
|
|
public @Nullable ItemStack getHowToBook(Player player) {
|
|
final Locale locale = player.getCurrentLocale();
|
|
ItemStack book = howToBooks.get(locale);
|
|
|
|
if(book == null) {
|
|
final Path baseFile = ConfigUtils.getPath(config, "howto-book-file", null);
|
|
if(baseFile == null) return null;
|
|
|
|
book = loadHowToBook(baseFile.resolve(locale.toLanguageTag().replace('-', '_') + ".xml"));
|
|
if(book != null) {
|
|
logger.fine("Loaded how-to book for locale " + locale);
|
|
howToBooks.put(locale, book);
|
|
}
|
|
}
|
|
|
|
return book;
|
|
}
|
|
|
|
@Nullable ItemStack loadHowToBook(Path file) {
|
|
try {
|
|
if(!Files.isRegularFile(file)) return null;
|
|
return itemParser.parseBook(saxBuilder.build(file.toFile())
|
|
.getRootElement());
|
|
}
|
|
catch(JDOMException | IOException | InvalidXMLException e) {
|
|
logger.log(Level.SEVERE, "Failed to parse how-to book from XML file " + file, e);
|
|
return null;
|
|
}
|
|
}
|
|
}
|