/* * Copyright (C) 2013-2016 Gonçalo Baltazar <me@goncalomb.com> * * This file is part of NBTEditor. * * NBTEditor 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. * * NBTEditor 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 NBTEditor. If not, see <http://www.gnu.org/licenses/>. */ package com.goncalomb.bukkit.nbteditor.nbt.variable; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map.Entry; import org.bukkit.entity.Player; import com.goncalomb.bukkit.mylib.reflect.NBTTagCompound; public final class VillagerCareerVariable extends NBTGenericVariable2X { private static final class CareerData { public final int professionId; public final int careerId; public CareerData(int professionId, int careerId) { this.professionId = professionId; this.careerId = careerId; } } private static HashMap<String, CareerData> _careers = new HashMap<String, CareerData>(); private static List<String> _careerNames; static { _careers.put("Farmer_Any", new CareerData(0, 0)); _careers.put("Farmer_Farmer", new CareerData(0, 1)); _careers.put("Farmer_Fisherman", new CareerData(0, 2)); _careers.put("Farmer_Shepherd", new CareerData(0, 3)); _careers.put("Farmer_Fletcher", new CareerData(0, 4)); _careers.put("Librarian_Any", new CareerData(1, 0)); _careers.put("Librarian_Librarian", new CareerData(1, 1)); _careers.put("Priest_Any", new CareerData(2, 0)); _careers.put("Priest_Cleric", new CareerData(2, 1)); _careers.put("Blacksmith_Any", new CareerData(3, 0)); _careers.put("Blacksmith_Armorer", new CareerData(3, 1)); _careers.put("Blacksmith_WeaponSmith", new CareerData(3, 2)); _careers.put("Blacksmith_ToolSmith", new CareerData(3, 3)); _careers.put("Butcher_Any", new CareerData(4, 0)); _careers.put("Butcher_Butcher", new CareerData(4, 1)); _careers.put("Butcher_Leatherworker", new CareerData(4, 2)); _careerNames = new ArrayList<String>(_careers.keySet()); Collections.sort(_careerNames, String.CASE_INSENSITIVE_ORDER); _careerNames = Collections.unmodifiableList(_careerNames); } public VillagerCareerVariable() { super("Profession", "Career"); } @Override boolean set(NBTTagCompound data, String value, Player player) { CareerData career = _careers.get(value); if (career != null) { data.setInt(_nbtKey, career.professionId); data.setInt(_nbtKey2, career.careerId); if (!data.hasKey("CareerLevel")) { data.setInt("CareerLevel", 1); } return true; } return false; } @Override String get(NBTTagCompound data) { if (!data.hasKey(_nbtKey)) { if (data.hasKey(_nbtKey2)) { return "Invalid"; } return null; } int pId = data.getInt(_nbtKey); int cId = data.getInt(_nbtKey2); for (Entry<String, CareerData> entry: _careers.entrySet()) { CareerData career = entry.getValue(); if (career.professionId == pId && career.careerId == cId) { return entry.getKey(); } } return "Unknown"; } @Override String getFormat() { return "A villager's profession/career. Use tab completion to view possible values."; } @Override public List<String> getPossibleValues() { return _careerNames; } }