mirror of
https://github.com/BentoBoxWorld/Challenges.git
synced 2024-12-30 21:07:47 +01:00
Add search button to the CommonPagedPanel.
Search button will allow to search elements if there are more than displayed elements.
This commit is contained in:
parent
8c9ddb189d
commit
09d5bfc8cf
@ -14,7 +14,7 @@ import org.eclipse.jdt.annotation.NonNull;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import world.bentobox.bentobox.api.panels.PanelItem;
|
import world.bentobox.bentobox.api.panels.PanelItem;
|
||||||
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;
|
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;
|
||||||
@ -27,7 +27,7 @@ import world.bentobox.challenges.utils.Constants;
|
|||||||
/**
|
/**
|
||||||
* This panel implements common things for Paged pages.
|
* This panel implements common things for Paged pages.
|
||||||
*/
|
*/
|
||||||
public abstract class CommonPagedPanel extends CommonPanel
|
public abstract class CommonPagedPanel<T> extends CommonPanel
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Instantiates a new Common paged panel.
|
* Instantiates a new Common paged panel.
|
||||||
@ -57,16 +57,28 @@ public abstract class CommonPagedPanel extends CommonPanel
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called when filter value is updated.
|
||||||
|
*/
|
||||||
|
protected abstract void updateFilters();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create element button panel item.
|
||||||
|
*
|
||||||
|
* @param object the object
|
||||||
|
* @return the panel item
|
||||||
|
*/
|
||||||
|
protected abstract PanelItem createElementButton(T object);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Populate elements.
|
* Populate elements.
|
||||||
*
|
*
|
||||||
* @param panelBuilder the panel builder
|
* @param panelBuilder the panel builder
|
||||||
* @param objectList the object list
|
* @param objectList the object list
|
||||||
* @param buttonBuilder the button builder
|
|
||||||
*/
|
*/
|
||||||
protected void populateElements(PanelBuilder panelBuilder,
|
protected void populateElements(PanelBuilder panelBuilder, List<T> objectList)
|
||||||
List<?> objectList,
|
|
||||||
Function<Object, PanelItem> buttonBuilder)
|
|
||||||
{
|
{
|
||||||
final int MAX_ELEMENTS = 21;
|
final int MAX_ELEMENTS = 21;
|
||||||
final int size = objectList.size();
|
final int size = objectList.size();
|
||||||
@ -91,7 +103,7 @@ public abstract class CommonPagedPanel extends CommonPanel
|
|||||||
{
|
{
|
||||||
if (!panelBuilder.slotOccupied(index))
|
if (!panelBuilder.slotOccupied(index))
|
||||||
{
|
{
|
||||||
panelBuilder.item(index, buttonBuilder.apply(objectList.get(objectIndex++)));
|
panelBuilder.item(index, this.createElementButton(objectList.get(objectIndex++)));
|
||||||
}
|
}
|
||||||
|
|
||||||
index++;
|
index++;
|
||||||
@ -107,6 +119,13 @@ public abstract class CommonPagedPanel extends CommonPanel
|
|||||||
{
|
{
|
||||||
panelBuilder.item(18, this.getButton(CommonButtons.PREVIOUS));
|
panelBuilder.item(18, this.getButton(CommonButtons.PREVIOUS));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add search button only if there is more than MAX_ELEMENTS objects or searchString
|
||||||
|
// is not blank.
|
||||||
|
if (!this.searchString.isBlank() || objectList.size() > MAX_ELEMENTS)
|
||||||
|
{
|
||||||
|
panelBuilder.item(40, this.getButton(CommonButtons.SEARCH));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -157,6 +176,59 @@ public abstract class CommonPagedPanel extends CommonPanel
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
else if (button == CommonButtons.SEARCH)
|
||||||
|
{
|
||||||
|
description.add(this.user.getTranslation(reference + "description"));
|
||||||
|
|
||||||
|
if (this.searchString != null && !this.searchString.isEmpty())
|
||||||
|
{
|
||||||
|
description.add(this.user.getTranslation(reference + "search",
|
||||||
|
Constants.PARAMETER_VALUE, this.searchString));
|
||||||
|
}
|
||||||
|
|
||||||
|
description.add("");
|
||||||
|
description.add(this.user.getTranslation(Constants.TIPS + "left-click-to-edit"));
|
||||||
|
|
||||||
|
if (!this.searchString.isEmpty())
|
||||||
|
{
|
||||||
|
description.add(this.user.getTranslation(Constants.TIPS + "right-click-to-clear"));
|
||||||
|
}
|
||||||
|
|
||||||
|
icon = new ItemStack(Material.ANVIL);
|
||||||
|
|
||||||
|
clickHandler = (panel, user, clickType, slot) -> {
|
||||||
|
if (clickType.isRightClick())
|
||||||
|
{
|
||||||
|
// Clear string.
|
||||||
|
this.searchString = "";
|
||||||
|
this.updateFilters();
|
||||||
|
// Rebuild gui.
|
||||||
|
this.build();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Create consumer that process description change
|
||||||
|
Consumer<String> consumer = value ->
|
||||||
|
{
|
||||||
|
if (value != null)
|
||||||
|
{
|
||||||
|
this.searchString = value;
|
||||||
|
this.updateFilters();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.build();
|
||||||
|
};
|
||||||
|
|
||||||
|
// start conversation
|
||||||
|
ConversationUtils.createStringInput(consumer,
|
||||||
|
user,
|
||||||
|
user.getTranslation(Constants.CONVERSATIONS + "write-search"),
|
||||||
|
user.getTranslation(Constants.CONVERSATIONS + "search-updated"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
icon = new ItemStack(Material.PAPER);
|
icon = new ItemStack(Material.PAPER);
|
||||||
@ -178,7 +250,8 @@ public abstract class CommonPagedPanel extends CommonPanel
|
|||||||
private enum CommonButtons
|
private enum CommonButtons
|
||||||
{
|
{
|
||||||
NEXT,
|
NEXT,
|
||||||
PREVIOUS
|
PREVIOUS,
|
||||||
|
SEARCH
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -186,4 +259,9 @@ public abstract class CommonPagedPanel extends CommonPanel
|
|||||||
* Current page index.
|
* Current page index.
|
||||||
*/
|
*/
|
||||||
private int pageIndex;
|
private int pageIndex;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Text that contains filter string.
|
||||||
|
*/
|
||||||
|
protected String searchString = "";
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ import world.bentobox.challenges.utils.Utils;
|
|||||||
/**
|
/**
|
||||||
* This class contains all necessary elements to create Levels Edit GUI.
|
* This class contains all necessary elements to create Levels Edit GUI.
|
||||||
*/
|
*/
|
||||||
public class EditLevelPanel extends CommonPagedPanel
|
public class EditLevelPanel extends CommonPagedPanel<Challenge>
|
||||||
{
|
{
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
// Section: Constructors
|
// Section: Constructors
|
||||||
@ -111,6 +111,16 @@ public class EditLevelPanel extends CommonPagedPanel
|
|||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called when filter value is updated.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void updateFilters()
|
||||||
|
{
|
||||||
|
// Do nothing here.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method builds all necessary elements in GUI panel.
|
* This method builds all necessary elements in GUI panel.
|
||||||
*/
|
*/
|
||||||
@ -190,11 +200,15 @@ public class EditLevelPanel extends CommonPagedPanel
|
|||||||
*/
|
*/
|
||||||
private void buildChallengesPanel(PanelBuilder panelBuilder)
|
private void buildChallengesPanel(PanelBuilder panelBuilder)
|
||||||
{
|
{
|
||||||
List<Challenge> challengeList = this.addon.getChallengesManager().getLevelChallenges(this.challengeLevel);
|
List<Challenge> challengeList = this.addon.getChallengesManager().
|
||||||
|
getLevelChallenges(this.challengeLevel).stream().
|
||||||
|
filter(challenge -> this.searchString.isBlank() ||
|
||||||
|
challenge.getFriendlyName().toLowerCase().contains(this.searchString.toLowerCase()) ||
|
||||||
|
challenge.getUniqueId().toLowerCase().contains(this.searchString.toLowerCase()) ||
|
||||||
|
challenge.getChallengeType().name().toLowerCase().contains(this.searchString)).
|
||||||
|
collect(Collectors.toList());
|
||||||
|
|
||||||
this.populateElements(panelBuilder,
|
this.populateElements(panelBuilder, challengeList);
|
||||||
challengeList,
|
|
||||||
o -> this.createChallengeIcon((Challenge) o));
|
|
||||||
|
|
||||||
panelBuilder.item(39, this.createButton(Button.ADD_CHALLENGES));
|
panelBuilder.item(39, this.createButton(Button.ADD_CHALLENGES));
|
||||||
panelBuilder.item(41, this.createButton(Button.REMOVE_CHALLENGES));
|
panelBuilder.item(41, this.createButton(Button.REMOVE_CHALLENGES));
|
||||||
@ -279,7 +293,8 @@ public class EditLevelPanel extends CommonPagedPanel
|
|||||||
* @param challenge Challenge which icon must be created.
|
* @param challenge Challenge which icon must be created.
|
||||||
* @return PanelItem that represents given challenge.
|
* @return PanelItem that represents given challenge.
|
||||||
*/
|
*/
|
||||||
private PanelItem createChallengeIcon(Challenge challenge)
|
@Override
|
||||||
|
protected PanelItem createElementButton(Challenge challenge)
|
||||||
{
|
{
|
||||||
return new PanelItemBuilder().
|
return new PanelItemBuilder().
|
||||||
name(Util.translateColorCodes(challenge.getFriendlyName())).
|
name(Util.translateColorCodes(challenge.getFriendlyName())).
|
||||||
|
@ -33,7 +33,7 @@ import world.bentobox.challenges.web.object.LibraryEntry;
|
|||||||
* This class contains all necessary elements to create GUI that lists all challenges.
|
* This class contains all necessary elements to create GUI that lists all challenges.
|
||||||
* It allows to edit them or remove, depending on given input mode.
|
* It allows to edit them or remove, depending on given input mode.
|
||||||
*/
|
*/
|
||||||
public class LibraryPanel extends CommonPagedPanel
|
public class LibraryPanel extends CommonPagedPanel<LibraryEntry>
|
||||||
{
|
{
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
// Section: Constructor
|
// Section: Constructor
|
||||||
@ -54,6 +54,8 @@ public class LibraryPanel extends CommonPagedPanel
|
|||||||
case DATABASE -> this.generateDatabaseEntries();
|
case DATABASE -> this.generateDatabaseEntries();
|
||||||
case TEMPLATE -> this.generateTemplateEntries();
|
case TEMPLATE -> this.generateTemplateEntries();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.filterElements = this.libraryEntries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -130,6 +132,32 @@ public class LibraryPanel extends CommonPagedPanel
|
|||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called when filter value is updated.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void updateFilters()
|
||||||
|
{
|
||||||
|
if (this.searchString == null || this.searchString.isBlank())
|
||||||
|
{
|
||||||
|
this.filterElements = this.libraryEntries;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.filterElements = this.libraryEntries.stream().
|
||||||
|
filter(element -> {
|
||||||
|
// If element name is set and name contains search field, then do not filter out.
|
||||||
|
return element.name().toLowerCase().contains(this.searchString.toLowerCase()) ||
|
||||||
|
element.author().toLowerCase().contains(this.searchString.toLowerCase()) ||
|
||||||
|
element.gameMode().toLowerCase().contains(this.searchString.toLowerCase()) ||
|
||||||
|
element.language().toLowerCase().contains(this.searchString.toLowerCase());
|
||||||
|
}).
|
||||||
|
distinct().
|
||||||
|
collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@ -156,9 +184,7 @@ public class LibraryPanel extends CommonPagedPanel
|
|||||||
|
|
||||||
GuiUtils.fillBorder(panelBuilder);
|
GuiUtils.fillBorder(panelBuilder);
|
||||||
|
|
||||||
this.populateElements(panelBuilder,
|
this.populateElements(panelBuilder, this.filterElements);
|
||||||
this.libraryEntries,
|
|
||||||
o -> this.createEntryIcon((LibraryEntry) o));
|
|
||||||
|
|
||||||
if (this.mode == Library.WEB)
|
if (this.mode == Library.WEB)
|
||||||
{
|
{
|
||||||
@ -232,7 +258,8 @@ public class LibraryPanel extends CommonPagedPanel
|
|||||||
* @param libraryEntry LibraryEntry which button must be created.
|
* @param libraryEntry LibraryEntry which button must be created.
|
||||||
* @return Entry button.
|
* @return Entry button.
|
||||||
*/
|
*/
|
||||||
private PanelItem createEntryIcon(LibraryEntry libraryEntry)
|
@Override
|
||||||
|
protected PanelItem createElementButton(LibraryEntry libraryEntry)
|
||||||
{
|
{
|
||||||
PanelItemBuilder itemBuilder = new PanelItemBuilder().
|
PanelItemBuilder itemBuilder = new PanelItemBuilder().
|
||||||
name(ChatColor.translateAlternateColorCodes('&', libraryEntry.name())).
|
name(ChatColor.translateAlternateColorCodes('&', libraryEntry.name())).
|
||||||
@ -436,4 +463,9 @@ public class LibraryPanel extends CommonPagedPanel
|
|||||||
* List of library elements.
|
* List of library elements.
|
||||||
*/
|
*/
|
||||||
private final List<LibraryEntry> libraryEntries;
|
private final List<LibraryEntry> libraryEntries;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores filtered items.
|
||||||
|
*/
|
||||||
|
private List<LibraryEntry> filterElements;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package world.bentobox.challenges.panel.admin;
|
package world.bentobox.challenges.panel.admin;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -25,7 +27,7 @@ import world.bentobox.challenges.utils.Utils;
|
|||||||
* This class contains all necessary elements to create GUI that lists all challenges.
|
* This class contains all necessary elements to create GUI that lists all challenges.
|
||||||
* It allows to edit them or remove, depending on given input mode.
|
* It allows to edit them or remove, depending on given input mode.
|
||||||
*/
|
*/
|
||||||
public class ListChallengesPanel extends CommonPagedPanel
|
public class ListChallengesPanel extends CommonPagedPanel<Challenge>
|
||||||
{
|
{
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
// Section: Constructor
|
// Section: Constructor
|
||||||
@ -96,6 +98,16 @@ public class ListChallengesPanel extends CommonPagedPanel
|
|||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called when filter value is updated.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void updateFilters()
|
||||||
|
{
|
||||||
|
// Do nothing here.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@ -114,9 +126,15 @@ public class ListChallengesPanel extends CommonPagedPanel
|
|||||||
GuiUtils.fillBorder(panelBuilder);
|
GuiUtils.fillBorder(panelBuilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.populateElements(panelBuilder,
|
List<Challenge> challengeList = this.addon.getChallengesManager().getAllChallenges(this.world).
|
||||||
this.addon.getChallengesManager().getAllChallenges(this.world),
|
stream().
|
||||||
o -> this.createChallengeIcon((Challenge) o));
|
filter(challenge -> this.searchString.isBlank() ||
|
||||||
|
challenge.getFriendlyName().toLowerCase().contains(this.searchString.toLowerCase()) ||
|
||||||
|
challenge.getUniqueId().toLowerCase().contains(this.searchString.toLowerCase()) ||
|
||||||
|
challenge.getChallengeType().name().toLowerCase().contains(this.searchString)).
|
||||||
|
collect(Collectors.toList());
|
||||||
|
|
||||||
|
this.populateElements(panelBuilder, challengeList);
|
||||||
|
|
||||||
panelBuilder.item(44, this.returnButton);
|
panelBuilder.item(44, this.returnButton);
|
||||||
|
|
||||||
@ -129,7 +147,8 @@ public class ListChallengesPanel extends CommonPagedPanel
|
|||||||
* @param challenge Challenge which button must be created.
|
* @param challenge Challenge which button must be created.
|
||||||
* @return Challenge button.
|
* @return Challenge button.
|
||||||
*/
|
*/
|
||||||
private PanelItem createChallengeIcon(Challenge challenge)
|
@Override
|
||||||
|
protected PanelItem createElementButton(Challenge challenge)
|
||||||
{
|
{
|
||||||
PanelItemBuilder itemBuilder = new PanelItemBuilder().
|
PanelItemBuilder itemBuilder = new PanelItemBuilder().
|
||||||
name(Util.translateColorCodes(challenge.getFriendlyName())).
|
name(Util.translateColorCodes(challenge.getFriendlyName())).
|
||||||
|
@ -4,7 +4,9 @@ package world.bentobox.challenges.panel.admin;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import world.bentobox.bentobox.api.panels.PanelItem;
|
import world.bentobox.bentobox.api.panels.PanelItem;
|
||||||
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;
|
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;
|
||||||
@ -12,6 +14,7 @@ import world.bentobox.bentobox.api.panels.builders.PanelItemBuilder;
|
|||||||
import world.bentobox.bentobox.api.user.User;
|
import world.bentobox.bentobox.api.user.User;
|
||||||
import world.bentobox.bentobox.util.Util;
|
import world.bentobox.bentobox.util.Util;
|
||||||
import world.bentobox.challenges.ChallengesAddon;
|
import world.bentobox.challenges.ChallengesAddon;
|
||||||
|
import world.bentobox.challenges.database.object.Challenge;
|
||||||
import world.bentobox.challenges.database.object.ChallengeLevel;
|
import world.bentobox.challenges.database.object.ChallengeLevel;
|
||||||
import world.bentobox.challenges.panel.CommonPagedPanel;
|
import world.bentobox.challenges.panel.CommonPagedPanel;
|
||||||
import world.bentobox.challenges.panel.CommonPanel;
|
import world.bentobox.challenges.panel.CommonPanel;
|
||||||
@ -25,7 +28,7 @@ import world.bentobox.challenges.utils.Utils;
|
|||||||
* This class creates GUI that lists all Levels. Clicking on Level icon will be processed
|
* This class creates GUI that lists all Levels. Clicking on Level icon will be processed
|
||||||
* by input mode.
|
* by input mode.
|
||||||
*/
|
*/
|
||||||
public class ListLevelsPanel extends CommonPagedPanel
|
public class ListLevelsPanel extends CommonPagedPanel<ChallengeLevel>
|
||||||
{
|
{
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
// Section: Constructor
|
// Section: Constructor
|
||||||
@ -96,6 +99,16 @@ public class ListLevelsPanel extends CommonPagedPanel
|
|||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called when filter value is updated.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void updateFilters()
|
||||||
|
{
|
||||||
|
// Do nothing here.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@ -114,9 +127,14 @@ public class ListLevelsPanel extends CommonPagedPanel
|
|||||||
GuiUtils.fillBorder(panelBuilder);
|
GuiUtils.fillBorder(panelBuilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.populateElements(panelBuilder,
|
List<ChallengeLevel> levelList = this.addon.getChallengesManager().getLevels(this.world).
|
||||||
this.addon.getChallengesManager().getLevels(this.world),
|
stream().
|
||||||
o -> this.createLevelIcon((ChallengeLevel) o));
|
filter(challenge -> this.searchString.isBlank() ||
|
||||||
|
challenge.getFriendlyName().toLowerCase().contains(this.searchString.toLowerCase()) ||
|
||||||
|
challenge.getUniqueId().toLowerCase().contains(this.searchString.toLowerCase())).
|
||||||
|
collect(Collectors.toList());
|
||||||
|
|
||||||
|
this.populateElements(panelBuilder, levelList);
|
||||||
|
|
||||||
panelBuilder.item(44, this.returnButton);
|
panelBuilder.item(44, this.returnButton);
|
||||||
|
|
||||||
@ -129,7 +147,8 @@ public class ListLevelsPanel extends CommonPagedPanel
|
|||||||
* @param challengeLevel Level which button must be created.
|
* @param challengeLevel Level which button must be created.
|
||||||
* @return Level button.
|
* @return Level button.
|
||||||
*/
|
*/
|
||||||
private PanelItem createLevelIcon(ChallengeLevel challengeLevel)
|
@Override
|
||||||
|
protected PanelItem createElementButton(ChallengeLevel challengeLevel)
|
||||||
{
|
{
|
||||||
PanelItemBuilder itemBuilder = new PanelItemBuilder().
|
PanelItemBuilder itemBuilder = new PanelItemBuilder().
|
||||||
name(Util.translateColorCodes(challengeLevel.getFriendlyName())).
|
name(Util.translateColorCodes(challengeLevel.getFriendlyName())).
|
||||||
|
@ -31,7 +31,7 @@ import world.bentobox.challenges.utils.Utils;
|
|||||||
/**
|
/**
|
||||||
* This class contains methods that allows to select specific user.
|
* This class contains methods that allows to select specific user.
|
||||||
*/
|
*/
|
||||||
public class ListUsersPanel extends CommonPagedPanel
|
public class ListUsersPanel extends CommonPagedPanel<Player>
|
||||||
{
|
{
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
// Section: Constructors
|
// Section: Constructors
|
||||||
@ -56,6 +56,7 @@ public class ListUsersPanel extends CommonPagedPanel
|
|||||||
super(addon, user, world, topLabel, permissionPrefix);
|
super(addon, user, world, topLabel, permissionPrefix);
|
||||||
this.onlineUsers = this.collectUsers(ViewMode.IN_WORLD);
|
this.onlineUsers = this.collectUsers(ViewMode.IN_WORLD);
|
||||||
this.operationMode = operationMode;
|
this.operationMode = operationMode;
|
||||||
|
this.filterElements = this.onlineUsers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -67,6 +68,7 @@ public class ListUsersPanel extends CommonPagedPanel
|
|||||||
super(panel);
|
super(panel);
|
||||||
this.onlineUsers = this.collectUsers(ViewMode.IN_WORLD);
|
this.onlineUsers = this.collectUsers(ViewMode.IN_WORLD);
|
||||||
this.operationMode = operationMode;
|
this.operationMode = operationMode;
|
||||||
|
this.filterElements = this.onlineUsers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -104,6 +106,29 @@ public class ListUsersPanel extends CommonPagedPanel
|
|||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called when filter value is updated.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void updateFilters()
|
||||||
|
{
|
||||||
|
if (this.searchString == null || this.searchString.isBlank())
|
||||||
|
{
|
||||||
|
this.filterElements = this.onlineUsers;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.filterElements = this.onlineUsers.stream().
|
||||||
|
filter(element -> {
|
||||||
|
// If element name is set and name contains search field, then do not filter out.
|
||||||
|
return element.getDisplayName().toLowerCase().contains(this.searchString.toLowerCase());
|
||||||
|
}).
|
||||||
|
distinct().
|
||||||
|
collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void build()
|
protected void build()
|
||||||
{
|
{
|
||||||
@ -112,9 +137,7 @@ public class ListUsersPanel extends CommonPagedPanel
|
|||||||
|
|
||||||
GuiUtils.fillBorder(panelBuilder);
|
GuiUtils.fillBorder(panelBuilder);
|
||||||
|
|
||||||
this.populateElements(panelBuilder,
|
this.populateElements(panelBuilder, this.filterElements);
|
||||||
this.onlineUsers,
|
|
||||||
o -> this.createPlayerIcon((Player) o));
|
|
||||||
|
|
||||||
// Add button that allows to toggle different player lists.
|
// Add button that allows to toggle different player lists.
|
||||||
panelBuilder.item( 4, this.createToggleButton());
|
panelBuilder.item( 4, this.createToggleButton());
|
||||||
@ -129,7 +152,8 @@ public class ListUsersPanel extends CommonPagedPanel
|
|||||||
* @param player Player which button must be created.
|
* @param player Player which button must be created.
|
||||||
* @return Player button.
|
* @return Player button.
|
||||||
*/
|
*/
|
||||||
private PanelItem createPlayerIcon(Player player)
|
@Override
|
||||||
|
protected PanelItem createElementButton(Player player)
|
||||||
{
|
{
|
||||||
final String reference = Constants.BUTTON + "player.";
|
final String reference = Constants.BUTTON + "player.";
|
||||||
|
|
||||||
@ -318,6 +342,10 @@ public class ListUsersPanel extends CommonPagedPanel
|
|||||||
this.onlineUsers = this.collectUsers(this.mode);
|
this.onlineUsers = this.collectUsers(this.mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset search
|
||||||
|
this.searchString = "";
|
||||||
|
this.updateFilters();
|
||||||
|
|
||||||
this.build();
|
this.build();
|
||||||
return true;
|
return true;
|
||||||
}).build();
|
}).build();
|
||||||
@ -359,6 +387,11 @@ public class ListUsersPanel extends CommonPagedPanel
|
|||||||
*/
|
*/
|
||||||
private List<Player> onlineUsers;
|
private List<Player> onlineUsers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List with players that should be in GUI.
|
||||||
|
*/
|
||||||
|
private List<Player> filterElements;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Current operation mode.
|
* Current operation mode.
|
||||||
*/
|
*/
|
||||||
|
@ -8,6 +8,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
@ -27,7 +28,7 @@ import world.bentobox.challenges.utils.Utils;
|
|||||||
/**
|
/**
|
||||||
* This class allows to edit material that are in required material map.
|
* This class allows to edit material that are in required material map.
|
||||||
*/
|
*/
|
||||||
public class ManageBlocksPanel extends CommonPagedPanel
|
public class ManageBlocksPanel extends CommonPagedPanel<Material>
|
||||||
{
|
{
|
||||||
private ManageBlocksPanel(CommonPanel parentGUI, Map<Material, Integer> materialMap)
|
private ManageBlocksPanel(CommonPanel parentGUI, Map<Material, Integer> materialMap)
|
||||||
{
|
{
|
||||||
@ -36,9 +37,12 @@ public class ManageBlocksPanel extends CommonPagedPanel
|
|||||||
this.materialList = new ArrayList<>(this.materialMap.keySet());
|
this.materialList = new ArrayList<>(this.materialMap.keySet());
|
||||||
|
|
||||||
// Sort materials by their ordinal value.
|
// Sort materials by their ordinal value.
|
||||||
this.materialList.sort(Comparator.comparing(Enum::ordinal));
|
this.materialList.sort(Comparator.comparing(Enum::name));
|
||||||
|
|
||||||
this.selectedMaterials = new HashSet<>();
|
this.selectedMaterials = new HashSet<>();
|
||||||
|
|
||||||
|
// Init without filters applied.
|
||||||
|
this.filterElements = this.materialList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -56,11 +60,34 @@ public class ManageBlocksPanel extends CommonPagedPanel
|
|||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called when filter value is updated.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void updateFilters()
|
||||||
|
{
|
||||||
|
if (this.searchString == null || this.searchString.isBlank())
|
||||||
|
{
|
||||||
|
this.filterElements = this.materialList;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.filterElements = this.materialList.stream().
|
||||||
|
filter(element -> {
|
||||||
|
// If element name is set and name contains search field, then do not filter out.
|
||||||
|
return element.name().toLowerCase().contains(this.searchString.toLowerCase());
|
||||||
|
}).
|
||||||
|
distinct().
|
||||||
|
collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method builds all necessary elements in GUI panel.
|
* This method builds all necessary elements in GUI panel.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void build()
|
protected void build()
|
||||||
{
|
{
|
||||||
PanelBuilder panelBuilder = new PanelBuilder().user(this.user).
|
PanelBuilder panelBuilder = new PanelBuilder().user(this.user).
|
||||||
name(this.user.getTranslation(Constants.TITLE + "manage-blocks"));
|
name(this.user.getTranslation(Constants.TITLE + "manage-blocks"));
|
||||||
@ -71,9 +98,7 @@ public class ManageBlocksPanel extends CommonPagedPanel
|
|||||||
panelBuilder.item(3, this.createButton(Button.ADD_BLOCK));
|
panelBuilder.item(3, this.createButton(Button.ADD_BLOCK));
|
||||||
panelBuilder.item(5, this.createButton(Button.REMOVE_BLOCK));
|
panelBuilder.item(5, this.createButton(Button.REMOVE_BLOCK));
|
||||||
|
|
||||||
this.populateElements(panelBuilder,
|
this.populateElements(panelBuilder, this.filterElements);
|
||||||
this.materialList,
|
|
||||||
o -> this.createElementButton((Material) o));
|
|
||||||
|
|
||||||
// Add return button.
|
// Add return button.
|
||||||
panelBuilder.item(44, this.returnButton);
|
panelBuilder.item(44, this.returnButton);
|
||||||
@ -181,7 +206,8 @@ public class ManageBlocksPanel extends CommonPagedPanel
|
|||||||
* @param material material which button must be created.
|
* @param material material which button must be created.
|
||||||
* @return new Button for material.
|
* @return new Button for material.
|
||||||
*/
|
*/
|
||||||
private PanelItem createElementButton(Material material)
|
@Override
|
||||||
|
protected PanelItem createElementButton(Material material)
|
||||||
{
|
{
|
||||||
final String reference = Constants.BUTTON + "material.";
|
final String reference = Constants.BUTTON + "material.";
|
||||||
|
|
||||||
@ -279,4 +305,9 @@ public class ManageBlocksPanel extends CommonPagedPanel
|
|||||||
* List of required materials.
|
* List of required materials.
|
||||||
*/
|
*/
|
||||||
private final Map<Material, Integer> materialMap;
|
private final Map<Material, Integer> materialMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores filtered items.
|
||||||
|
*/
|
||||||
|
private List<Material> filterElements;
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
@ -28,7 +29,7 @@ import world.bentobox.challenges.utils.Utils;
|
|||||||
/**
|
/**
|
||||||
* This class allows to edit entities that are in required entities map.
|
* This class allows to edit entities that are in required entities map.
|
||||||
*/
|
*/
|
||||||
public class ManageEntitiesPanel extends CommonPagedPanel
|
public class ManageEntitiesPanel extends CommonPagedPanel<EntityType>
|
||||||
{
|
{
|
||||||
private ManageEntitiesPanel(CommonPanel parentGUI, Map<EntityType, Integer> requiredEntities)
|
private ManageEntitiesPanel(CommonPanel parentGUI, Map<EntityType, Integer> requiredEntities)
|
||||||
{
|
{
|
||||||
@ -39,6 +40,7 @@ public class ManageEntitiesPanel extends CommonPagedPanel
|
|||||||
this.entityList.sort(Comparator.comparing(Enum::name));
|
this.entityList.sort(Comparator.comparing(Enum::name));
|
||||||
|
|
||||||
this.selectedEntities = new HashSet<>(EntityType.values().length);
|
this.selectedEntities = new HashSet<>(EntityType.values().length);
|
||||||
|
this.filterElements = this.entityList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -56,11 +58,34 @@ public class ManageEntitiesPanel extends CommonPagedPanel
|
|||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called when filter value is updated.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void updateFilters()
|
||||||
|
{
|
||||||
|
if (this.searchString == null || this.searchString.isBlank())
|
||||||
|
{
|
||||||
|
this.filterElements = this.entityList;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.filterElements = this.entityList.stream().
|
||||||
|
filter(element -> {
|
||||||
|
// If element name is set and name contains search field, then do not filter out.
|
||||||
|
return element.name().toLowerCase().contains(this.searchString.toLowerCase());
|
||||||
|
}).
|
||||||
|
distinct().
|
||||||
|
collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method builds all necessary elements in GUI panel.
|
* This method builds all necessary elements in GUI panel.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void build()
|
protected void build()
|
||||||
{
|
{
|
||||||
PanelBuilder panelBuilder = new PanelBuilder().user(this.user).
|
PanelBuilder panelBuilder = new PanelBuilder().user(this.user).
|
||||||
name(this.user.getTranslation(Constants.TITLE + "manage-entities"));
|
name(this.user.getTranslation(Constants.TITLE + "manage-entities"));
|
||||||
@ -72,9 +97,7 @@ public class ManageEntitiesPanel extends CommonPagedPanel
|
|||||||
panelBuilder.item(5, this.createButton(Button.REMOVE_ENTITY));
|
panelBuilder.item(5, this.createButton(Button.REMOVE_ENTITY));
|
||||||
panelBuilder.item(8, this.createButton(Button.SWITCH_ENTITY));
|
panelBuilder.item(8, this.createButton(Button.SWITCH_ENTITY));
|
||||||
|
|
||||||
this.populateElements(panelBuilder,
|
this.populateElements(panelBuilder, this.filterElements);
|
||||||
this.entityList,
|
|
||||||
o -> this.createEntityButton((EntityType) o));
|
|
||||||
|
|
||||||
// Add return button.
|
// Add return button.
|
||||||
panelBuilder.item(44, this.returnButton);
|
panelBuilder.item(44, this.returnButton);
|
||||||
@ -193,7 +216,8 @@ public class ManageEntitiesPanel extends CommonPagedPanel
|
|||||||
* @param entity Entity which button must be created.
|
* @param entity Entity which button must be created.
|
||||||
* @return new Button for entity.
|
* @return new Button for entity.
|
||||||
*/
|
*/
|
||||||
private PanelItem createEntityButton(EntityType entity)
|
@Override
|
||||||
|
protected PanelItem createElementButton(EntityType entity)
|
||||||
{
|
{
|
||||||
final String reference = Constants.BUTTON + "entity.";
|
final String reference = Constants.BUTTON + "entity.";
|
||||||
|
|
||||||
@ -299,4 +323,9 @@ public class ManageEntitiesPanel extends CommonPagedPanel
|
|||||||
* Boolean indicate if entities should be displayed as eggs or mob heads.
|
* Boolean indicate if entities should be displayed as eggs or mob heads.
|
||||||
*/
|
*/
|
||||||
private boolean asEggs;
|
private boolean asEggs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores filtered items.
|
||||||
|
*/
|
||||||
|
private List<EntityType> filterElements;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user