public void onSelectionChanged(String oreName) {

    oreList = OreDictionaryArbiter.getOres(oreName);
    oreSelection = 0;

    lexiconInv.setInventorySlotContents(0, oreList.get(oreSelection));
    PacketTFBase.sendLexiconStudySelectPacketToServer(ContainerLexiconStudy.SELECT_ORE, (oreName));
  }
  public boolean canSetPreferred() {

    ItemStack input = lexiconInv.getStackInSlot(0);

    if (input == null) {
      return false;
    }
    return LexiconManager.validOre(input);
  }
  public boolean doClearPreferred() {

    if (!hasPreferredOre()) {
      return false;
    }
    LexiconManager.clearPreferredStack(player, lexiconInv.getStackInSlot(0));
    hasPreferredStack = false;
    syncClient = true;

    return true;
  }
  public boolean doSetPreferred() {

    if (!canSetPreferred()) {
      return false;
    }
    LexiconManager.setPreferredStack(player, lexiconInv.getStackInSlot(0));
    hasPreferredStack = true;
    syncClient = true;

    return true;
  }
  public void handlePacket(PacketTFBase payload) {

    switch (payload.getByte()) {
      case ORE_PREV:
        prevOre();
        return;
      case ORE_NEXT:
        nextOre();
        return;
      case SET_PREFERRED:
        doSetPreferred();
        return;
      case CLEAR_PREFERRED:
        doClearPreferred();
        return;
      case SELECT_ORE:
        String oreName = payload.getString();
        oreList = OreDictionaryArbiter.getOres(oreName);
        if (LexiconManager.hasPreferredStack(player, oreName)) {
          ItemStack ore = LexiconManager.getPreferredStack(player, oreName);
          lexiconInv.setInventorySlotContents(0, ore);
          for (int i = 0; i < oreList.size(); i++) {
            if (oreList.get(i) == ore) {
              oreSelection = i;
              break;
            }
          }
          hasPreferredStack = true;
        } else {
          lexiconInv.setInventorySlotContents(0, OreDictionaryArbiter.getOres(oreName).get(0));
          oreSelection = 0;
          hasPreferredStack = false;
        }
        syncClient = true;
      default:
    }
  }
  public void nextOre() {

    oreSelection++;
    oreSelection %= oreList.size();
    lexiconInv.setInventorySlotContents(0, oreList.get(oreSelection));
  }