Package simpleserver.config.data

Source Code of simpleserver.config.data.Warp

/*
* Copyright (c) 2010 SimpleServer authors (see CONTRIBUTORS)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package simpleserver.config.data;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

import simpleserver.Position;
import simpleserver.nbt.NBTArray;
import simpleserver.nbt.NBTCompound;

public class Warp {
  private NBTCompound node;
  private final String WARP = "warp";
  private final String CAPS = "capitals";

  public Set<String> keys() {
    return node.names();
  }

  public List<String> names(String prefix) {
    Set<String> keys = keys();
    List<String> names = new ArrayList<String>(keys.size());
    for (String key : keys) {
      if (prefix == null || key.startsWith(prefix.toLowerCase())) {
        names.add(capitalize(key));
      }
    }
    Collections.sort(names);
    return names;
  }

  public List<String> names() {
    return names(null);
  }

  public boolean contains(String name) {
    return node.containsKey(name.toLowerCase());
  }

  public String getName(String prefix) {
    prefix = prefix.toLowerCase();
    if (contains(prefix)) {
      return capitalize(prefix);
    }
    for (String name : keys()) {
      if (name.startsWith(prefix)) {
        return capitalize(name);
      }
    }
    return null;
  }

  private String capitalize(String name) {
    return capitalize(name, node.getCompound(name).getArray(CAPS).get());
  }

  public Position get(String name) {
    name = name.toLowerCase();
    if (!node.containsKey(name)) {
      return null;
    }
    return new Position(node.getCompound(name));
  }

  public void set(String name, Position pos) {
    NBTCompound tag = pos.tag();
    tag.rename(name.toLowerCase());
    tag.put(new NBTArray(CAPS, capitals(name)));
    node.put(tag);
  }

  public void remove(String name) {
    name = name.toLowerCase();
    node.remove(name);
  }

  void load(NBTCompound data) {
    if (data.containsKey(WARP)) {
      try {
        node = data.getCompound(WARP);
        capitalizeWaypoints();
        return;
      } catch (Exception e) {
        System.out.println("[WARNING] Warp list is corrupt. Replacing it with empty list...");
      }
    }
    node = new NBTCompound(WARP);
    data.put(node);
  }

  private void capitalizeWaypoints() {
    List<String> keys = new ArrayList<String>(keys());
    for (String name : keys) {
      if (!node.getCompound(name).containsKey(CAPS)) {
        node.getCompound(name).put(new NBTArray(CAPS, capitals(name)));
        node.rename(name, name.toLowerCase());
      }
    }
  }

  public static byte[] capitals(String string) {
    int length = string.length() / 8;
    if (string.length() % 8 != 0) {
      length++;
    }
    byte[] caps = new byte[length];
    for (int i = 0; i < length; i++) {
      byte bools = 0;
      for (int j = 0; j < 8; j++) {
        int pos = i * 8 + j;
        if (pos >= string.length()) {
          break;
        }
        if (string.charAt(pos) >= 0x41 && string.charAt(pos) <= 0x5a) {
          bools = (byte) (bools | (0x1 << j));
        }
      }
      caps[i] = bools;
    }
    return caps;
  }

  public static String capitalize(String string, byte[] capitals) {
    StringBuilder builder = new StringBuilder(string);
    for (int i = 0; i < string.length(); i++) {
      if ((capitals[i / 8] & (1 << i % 8)) != 0) {
        builder.setCharAt(i, (char) (string.charAt(i) - 32));
      }
    }
    return builder.toString();
  }
}
TOP

Related Classes of simpleserver.config.data.Warp

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.