/* * Copyright (C) 2004-2015 L2J Server * * This file is part of L2J Server. * * L2J Server is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * L2J Server is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package com.l2jserver.gameserver.data.xml.impl; import java.util.HashMap; import java.util.Map; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import com.l2jserver.gameserver.model.StatsSet; import com.l2jserver.gameserver.model.items.enchant.EnchantScroll; import com.l2jserver.gameserver.model.items.enchant.EnchantSupportItem; import com.l2jserver.gameserver.model.items.instance.L2ItemInstance; import com.l2jserver.util.data.xml.IXmlReader; /** * Loads item enchant data. * @author UnAfraid */ public class EnchantItemData implements IXmlReader { private final Map _scrolls = new HashMap<>(); private final Map _supports = new HashMap<>(); /** * Instantiates a new enchant item data. */ public EnchantItemData() { load(); } @Override public synchronized void load() { _scrolls.clear(); _supports.clear(); parseDatapackFile("data/enchantItemData.xml"); LOGGER.info("{}: Loaded {} Enchant Scrolls.", getClass().getSimpleName(), _scrolls.size()); LOGGER.info("{}: Loaded {} Support Items.", getClass().getSimpleName(), _supports.size()); } @Override public void parseDocument(Document doc) { StatsSet set; Node att; NamedNodeMap attrs; for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) { if ("list".equalsIgnoreCase(n.getNodeName())) { for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling()) { if ("enchant".equalsIgnoreCase(d.getNodeName())) { attrs = d.getAttributes(); set = new StatsSet(); for (int i = 0; i < attrs.getLength(); i++) { att = attrs.item(i); set.set(att.getNodeName(), att.getNodeValue()); } try { final EnchantScroll item = new EnchantScroll(set); for (Node cd = d.getFirstChild(); cd != null; cd = cd.getNextSibling()) { if ("item".equalsIgnoreCase(cd.getNodeName())) { item.addItem(parseInteger(cd.getAttributes(), "id")); } } _scrolls.put(item.getId(), item); } catch (NullPointerException e) { LOGGER.warn("{}: Unexistent enchant scroll: {} defined in enchant data!", getClass().getSimpleName(), set.getString("id")); } catch (IllegalAccessError e) { LOGGER.warn("{}: Wrong enchant scroll item type: {} defined in enchant data!", getClass().getSimpleName(), set.getString("id")); } } else if ("support".equalsIgnoreCase(d.getNodeName())) { attrs = d.getAttributes(); set = new StatsSet(); for (int i = 0; i < attrs.getLength(); i++) { att = attrs.item(i); set.set(att.getNodeName(), att.getNodeValue()); } try { final EnchantSupportItem item = new EnchantSupportItem(set); _supports.put(item.getId(), item); } catch (NullPointerException e) { LOGGER.warn("{}: Unexistent enchant support item: {} defined in enchant data!", getClass().getSimpleName(), set.getString("id")); } catch (IllegalAccessError e) { LOGGER.warn("{}: Wrong enchant support item type: {} defined in enchant data!", getClass().getSimpleName(), set.getString("id")); } } } } } } /** * Gets the enchant scroll. * @param scroll the scroll * @return enchant template for scroll */ public final EnchantScroll getEnchantScroll(L2ItemInstance scroll) { return _scrolls.get(scroll.getId()); } /** * Gets the support item. * @param item the item * @return enchant template for support item */ public final EnchantSupportItem getSupportItem(L2ItemInstance item) { return _supports.get(item.getId()); } /** * Gets the single instance of EnchantItemData. * @return single instance of EnchantItemData */ public static final EnchantItemData getInstance() { return SingletonHolder._instance; } private static class SingletonHolder { protected static final EnchantItemData _instance = new EnchantItemData(); } }