1 package com.realtime.crossfire.jxclient.knowledge;
7 import java.util.ArrayList;
8 import java.util.Collection;
9 import java.util.Collections;
10 import java.util.Comparator;
11 import java.util.List;
12 import java.util.stream.Collectors;
13 import org.jetbrains.annotations.NotNull;
14 import org.jetbrains.annotations.Nullable;
26 private static final Comparator<KnowledgeItem>
KNOWLEDGE_COMPARATOR = (o1, o2) -> o1.getKnowledgeTitle().compareTo(o2.getKnowledgeTitle());
36 private final List<String>
types =
new ArrayList<>();
39 private final List<String>
names =
new ArrayList<>();
42 private final List<Integer>
faces =
new ArrayList<>();
45 private final List<Boolean>
attempt =
new ArrayList<>();
48 private final Collection<KnowledgeItem>
items =
new ArrayList<>();
61 @SuppressWarnings(
"FieldCanBeLocal")
70 public void metaserver() {
75 public void preConnecting(@NotNull
final String serverInfo) {
80 public void connecting(@NotNull
final String serverInfo) {
86 filteredItems.clear();
95 public void connected() {
100 public void connectFailed(@NotNull
final String reason) {
115 filteredItems.clear();
123 listeners.
add(listener);
126 public void addKnowledgeType(@NotNull
final String type, @NotNull
final String name,
final int face,
final boolean canAttempt) {
128 if (type.isEmpty()) {
129 names.add(
"All types");
134 attempt.add(canAttempt);
136 listener.typeAdded(0);
153 if (index < 0 || index >= faces.size()) {
156 return names.get(index);
160 if (index < 0 || index >= faces.size()) {
163 return faces.get(index);
167 for (
int i = 0; i < types.size(); i++) {
168 if (type.equals(types.get(i))) {
169 return attempt.get(i);
176 public void addKnowledge(
final int index, @NotNull
final String type, @NotNull
final String title,
final int face) {
180 listener.knowledgeAdded(0);
185 return filteredItems.size();
196 return filteredItems.get(index);
197 }
catch (
final IndexOutOfBoundsException ignored) {
203 if (index < 0 || index >= types.size()) {
207 final String filter = types.get(index);
209 if (typeFilter.equals(filter)) {
217 listener.knowledgeAdded(0);
222 filteredItems.clear();
223 filteredItems.addAll(items.stream().filter(item -> typeFilter.isEmpty() || item.getType().equals(typeFilter)).collect(Collectors.toList()));
224 Collections.sort(filteredItems, KNOWLEDGE_COMPARATOR);
KnowledgeItem getKnowledge(final int index)
Returns a KnowledgeItem instance by index.
Interface for listeners interested gui state changes.
Maintains the current GuiState.
final List< String > names
KnowledgeManager(@NotNull final GuiStateManager guiStateManager)
A list of event listeners.
final List< Boolean > attempt
int getTypeFace(final int index)
static final Comparator< KnowledgeItem > KNOWLEDGE_COMPARATOR
Compare two knowledge items.
String getTypeName(final int index)
boolean canAttemptType(@NotNull final String type)
Manages all knowledge the player knows.
void addKnowledgeListener(@NotNull final KnowledgeListener listener)
Adds a KnowledgeListener to notify about changes.
final Collection< KnowledgeItem > items
final List< Integer > faces
final GuiStateListener guiStateListener
The GuiStateListener for detecting established or dropped connections.
final List< KnowledgeItem > filteredItems
void selectCharacter()
A character name was sent to the server.
void add(@NotNull final T listener)
Adds a listener.
void addKnowledge(final int index, @NotNull final String type, @NotNull final String title, final int face)
Describes a Crossfire spell.
void addKnowledgeType(@NotNull final String type, @NotNull final String name, final int face, final boolean canAttempt)
final List< String > types
Connection progress states of the Crossfire server connection.
void filterType(final int index)
final EventListenerList2< KnowledgeListener > listeners
The KnowledgeListeners to notify about changes.