Made the group and preset group gui pages paginated

This commit is contained in:
Esophose 2020-09-16 15:37:36 -06:00
parent cab6de1bfc
commit 99c6666384
6 changed files with 102 additions and 42 deletions

1
.gitignore vendored
View File

@ -7,3 +7,4 @@ target/
/bin/
/docs/
/images/
/LocaleTransformer

View File

@ -93,7 +93,7 @@ public class GuiInventoryDefault extends GuiInventory {
GuiIcon.GROUPS.get(),
localeManager.getLocaleMessage("gui-color-icon-name") + localeManager.getLocaleMessage("gui-manage-your-groups"),
new String[]{localeManager.getLocaleMessage("gui-color-info") + localeManager.getLocaleMessage("gui-manage-your-groups-description")},
(button, isShiftClick) -> guiManager.transition(new GuiInventoryManageGroups(pplayer)));
(button, isShiftClick) -> guiManager.transition(new GuiInventoryManageGroups(pplayer, 1)));
this.actionButtons.add(manageYourGroupsButton);
}
@ -104,7 +104,7 @@ public class GuiInventoryDefault extends GuiInventory {
GuiIcon.PRESET_GROUPS.get(),
localeManager.getLocaleMessage("gui-color-icon-name") + localeManager.getLocaleMessage("gui-load-a-preset-group"),
new String[]{localeManager.getLocaleMessage("gui-color-info") + localeManager.getLocaleMessage("gui-load-a-preset-group-description")},
(button, isShiftClick) -> guiManager.transition(new GuiInventoryLoadPresetGroups(pplayer, false)));
(button, isShiftClick) -> guiManager.transition(new GuiInventoryLoadPresetGroups(pplayer, false, 1)));
this.actionButtons.add(loadPresetGroups);
}

View File

@ -16,11 +16,12 @@ import dev.esophose.playerparticles.util.StringPlaceholders;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import org.bukkit.Bukkit;
public class GuiInventoryLoadPresetGroups extends GuiInventory {
public GuiInventoryLoadPresetGroups(PPlayer pplayer, boolean isEndPoint) {
public GuiInventoryLoadPresetGroups(PPlayer pplayer, boolean isEndPoint, int pageNumber) {
super(pplayer, Bukkit.createInventory(pplayer.getPlayer(), INVENTORY_SIZE, PlayerParticles.getInstance().getManager(LocaleManager.class).getLocaleMessage("gui-load-a-preset-group")));
LocaleManager localeManager = PlayerParticles.getInstance().getManager(LocaleManager.class);
@ -28,32 +29,39 @@ public class GuiInventoryLoadPresetGroups extends GuiInventory {
this.fillBorder(BorderColor.GREEN);
int index = 10;
List<ParticleGroupPreset> groups = PlayerParticles.getInstance().getManager(ParticleGroupPresetManager.class)
.getPresetGroupsForPlayer(pplayer)
.stream()
.filter(x -> x.canPlayerUse(pplayer))
.collect(Collectors.toList());
int numberOfItems = groups.size();
int itemsPerPage = 28;
int maxPages = (int) Math.max(1, Math.ceil((double) numberOfItems / itemsPerPage));
int slot = 10;
int nextWrap = 17;
int maxIndex = 43;
List<ParticleGroupPreset> groups = PlayerParticles.getInstance().getManager(ParticleGroupPresetManager.class).getPresetGroupsForPlayer(pplayer);
for (ParticleGroupPreset group : groups) {
if (!group.canPlayerUse(pplayer))
continue;
for (int i = (pageNumber - 1) * itemsPerPage; i < numberOfItems; i++) {
ParticleGroupPreset group = groups.get(i);
List<ParticlePair> particles = new ArrayList<>(group.getGroup().getParticles().values());
particles.sort(Comparator.comparingInt(ParticlePair::getId));
String[] lore = new String[particles.size() + 1];
lore[0] = localeManager.getLocaleMessage("gui-color-subtext") + localeManager.getLocaleMessage("gui-click-to-load", StringPlaceholders.single("amount", particles.size()));
int i = 1;
int n = 1;
for (ParticlePair particle : particles) {
StringPlaceholders stringPlaceholders = StringPlaceholders.builder("id", particle.getId())
.addPlaceholder("effect", ParticleUtils.formatName(particle.getEffect().getName()))
.addPlaceholder("style", ParticleUtils.formatName(particle.getStyle().getName()))
.addPlaceholder("data", particle.getDataString())
.build();
lore[i] = localeManager.getLocaleMessage("gui-color-info") + localeManager.getLocaleMessage("gui-particle-info", stringPlaceholders);
i++;
lore[n] = localeManager.getLocaleMessage("gui-color-info") + localeManager.getLocaleMessage("gui-particle-info", stringPlaceholders);
n++;
}
// Load Group Buttons
GuiActionButton groupButton = new GuiActionButton(index, group.getGuiIcon(), localeManager.getLocaleMessage("gui-color-icon-name") + group.getDisplayName(), lore, (button, isShiftClick) -> {
GuiActionButton groupButton = new GuiActionButton(slot, group.getGuiIcon(), localeManager.getLocaleMessage("gui-color-icon-name") + group.getDisplayName(), lore, (button, isShiftClick) -> {
ParticleGroup activeGroup = pplayer.getActiveParticleGroup();
activeGroup.getParticles().clear();
for (ParticlePair particle : particles) {
@ -68,12 +76,34 @@ public class GuiInventoryLoadPresetGroups extends GuiInventory {
});
this.actionButtons.add(groupButton);
index++;
if (index == nextWrap) { // Loop around border
slot++;
if (slot == nextWrap) { // Loop around border
nextWrap += 9;
index += 2;
slot += 2;
}
if (index > maxIndex) break; // Overflowed the available space
if (slot > maxIndex) break; // Overflowed the available space
}
// Previous page button
if (pageNumber != 1) {
GuiActionButton previousPageButton = new GuiActionButton(
INVENTORY_SIZE - 6,
GuiIcon.PREVIOUS_PAGE.get(),
localeManager.getLocaleMessage("gui-color-info") + localeManager.getLocaleMessage("gui-previous-page-button", StringPlaceholders.builder("start", pageNumber - 1).addPlaceholder("end", maxPages).build()),
new String[]{},
(button, isShiftClick) -> guiManager.transition(new GuiInventoryLoadPresetGroups(pplayer, isEndPoint, pageNumber - 1)));
this.actionButtons.add(previousPageButton);
}
// Next page button
if (pageNumber != maxPages) {
GuiActionButton nextPageButton = new GuiActionButton(
INVENTORY_SIZE - 4,
GuiIcon.NEXT_PAGE.get(),
localeManager.getLocaleMessage("gui-color-info") + localeManager.getLocaleMessage("gui-next-page-button", StringPlaceholders.builder("start", pageNumber + 1).addPlaceholder("end", maxPages).build()),
new String[]{},
(button, isShiftClick) -> guiManager.transition(new GuiInventoryLoadPresetGroups(pplayer, isEndPoint, pageNumber + 1)));
this.actionButtons.add(nextPageButton);
}
if (!isEndPoint) {
@ -87,7 +117,7 @@ public class GuiInventoryLoadPresetGroups extends GuiInventory {
} else {
// Reset Particles Button
GuiActionButton resetParticles = new GuiActionButton(
49,
INVENTORY_SIZE - 5,
GuiIcon.RESET.get(),
localeManager.getLocaleMessage("gui-color-icon-name") + localeManager.getLocaleMessage("gui-reset-particles"),
new String[]{localeManager.getLocaleMessage("gui-color-unavailable") + localeManager.getLocaleMessage("gui-reset-particles-description")},

View File

@ -19,11 +19,12 @@ import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import org.bukkit.Bukkit;
public class GuiInventoryManageGroups extends GuiInventory {
public GuiInventoryManageGroups(PPlayer pplayer) {
public GuiInventoryManageGroups(PPlayer pplayer, int pageNumber) {
super(pplayer, Bukkit.createInventory(pplayer.getPlayer(), INVENTORY_SIZE, PlayerParticles.getInstance().getManager(LocaleManager.class).getLocaleMessage("gui-manage-your-groups")));
LocaleManager localeManager = PlayerParticles.getInstance().getManager(LocaleManager.class);
@ -31,35 +32,43 @@ public class GuiInventoryManageGroups extends GuiInventory {
this.fillBorder(BorderColor.BROWN);
int index = 10;
int nextWrap = 17;
int maxIndex = 35;
List<ParticleGroup> groups = new ArrayList<>(pplayer.getParticleGroups().values());
groups.sort(Comparator.comparing(ParticleGroup::getName));
List<ParticleGroup> groups = pplayer.getParticleGroups().values().stream()
.filter(x -> !x.getName().equals(ParticleGroup.DEFAULT_NAME))
.sorted(Comparator.comparing(ParticleGroup::getName))
.collect(Collectors.toList());
for (ParticleGroup group : groups) {
if (group.getName().equals(ParticleGroup.DEFAULT_NAME)) continue;
int numberOfItems = groups.size();
int itemsPerPage = 28;
int maxPages = (int) Math.max(1, Math.ceil((double) numberOfItems / itemsPerPage));
int slot = 10;
int nextWrap = 17;
int maxIndex = 43;
for (int i = (pageNumber - 1) * itemsPerPage; i < numberOfItems; i++) {
ParticleGroup group = groups.get(i);
if (group.getName().equals(ParticleGroup.DEFAULT_NAME))
continue;
List<ParticlePair> particles = new ArrayList<>(group.getParticles().values());
particles.sort(Comparator.comparingInt(ParticlePair::getId));
String[] lore = new String[particles.size() + 2];
lore[0] = localeManager.getLocaleMessage("gui-color-subtext") + localeManager.getLocaleMessage("gui-click-to-load", StringPlaceholders.single("amount", particles.size()));
int i = 1;
int n = 1;
for (ParticlePair particle : particles) {
StringPlaceholders stringPlaceholders = StringPlaceholders.builder("id", particle.getId())
.addPlaceholder("effect", ParticleUtils.formatName(particle.getEffect().getName()))
.addPlaceholder("style", ParticleUtils.formatName(particle.getStyle().getName()))
.addPlaceholder("data", particle.getDataString())
.build();
lore[i] = localeManager.getLocaleMessage("gui-color-info") + localeManager.getLocaleMessage("gui-particle-info", stringPlaceholders);
i++;
lore[n] = localeManager.getLocaleMessage("gui-color-info") + localeManager.getLocaleMessage("gui-particle-info", stringPlaceholders);
n++;
}
lore[i] = localeManager.getLocaleMessage("gui-color-unavailable") + localeManager.getLocaleMessage("gui-shift-click-to-delete");
lore[n] = localeManager.getLocaleMessage("gui-color-unavailable") + localeManager.getLocaleMessage("gui-shift-click-to-delete");
// Load Group Buttons
GuiActionButton groupButton = new GuiActionButton(
index,
slot,
GuiIcon.GROUPS.get(),
localeManager.getLocaleMessage("gui-color-icon-name") + group.getName(),
lore,
@ -82,12 +91,34 @@ public class GuiInventoryManageGroups extends GuiInventory {
});
this.actionButtons.add(groupButton);
index++;
if (index == nextWrap) { // Loop around border
slot++;
if (slot == nextWrap) { // Loop around border
nextWrap += 9;
index += 2;
slot += 2;
}
if (index > maxIndex) break; // Overflowed the available space
if (slot > maxIndex) break; // Overflowed the available space
}
// Previous page button
if (pageNumber != 1) {
GuiActionButton previousPageButton = new GuiActionButton(
INVENTORY_SIZE - 6,
GuiIcon.PREVIOUS_PAGE.get(),
localeManager.getLocaleMessage("gui-color-info") + localeManager.getLocaleMessage("gui-previous-page-button", StringPlaceholders.builder("start", pageNumber - 1).addPlaceholder("end", maxPages).build()),
new String[]{},
(button, isShiftClick) -> guiManager.transition(new GuiInventoryManageGroups(pplayer, pageNumber - 1)));
this.actionButtons.add(previousPageButton);
}
// Next page button
if (pageNumber != maxPages) {
GuiActionButton nextPageButton = new GuiActionButton(
INVENTORY_SIZE - 4,
GuiIcon.NEXT_PAGE.get(),
localeManager.getLocaleMessage("gui-color-info") + localeManager.getLocaleMessage("gui-next-page-button", StringPlaceholders.builder("start", pageNumber + 1).addPlaceholder("end", maxPages).build()),
new String[]{},
(button, isShiftClick) -> guiManager.transition(new GuiInventoryManageGroups(pplayer, pageNumber + 1)));
this.actionButtons.add(nextPageButton);
}
boolean hasReachedMax = PlayerParticles.getInstance().getManager(PermissionManager.class).hasPlayerReachedMaxGroups(pplayer);
@ -109,17 +140,16 @@ public class GuiInventoryManageGroups extends GuiInventory {
// Save Group Button
GuiActionButton saveGroupButton = new GuiActionButton(
40,
INVENTORY_SIZE - 5,
GuiIcon.CREATE.get(),
localeManager.getLocaleMessage("gui-color-icon-name") + localeManager.getLocaleMessage("gui-save-group"),
lore,
(button, isShiftClick) -> {
if (hasReachedMax || !hasParticles) return;
if (hasReachedMax || !hasParticles)
return;
PlayerChatHook.addHook(new PlayerChatHookData(pplayer.getUniqueId(), 15, (textEntered) -> {
if (textEntered == null || textEntered.equalsIgnoreCase("cancel")) {
guiManager.transition(new GuiInventoryManageGroups(pplayer));
} else {
if (textEntered != null && !textEntered.equalsIgnoreCase("cancel")) {
String groupName = textEntered.split(" ")[0];
// Check that the groupName isn't the reserved name
@ -153,8 +183,8 @@ public class GuiInventoryManageGroups extends GuiInventory {
localeManager.sendMessage(pplayer, "group-save-success", StringPlaceholders.single("name", groupName));
}
guiManager.transition(new GuiInventoryManageGroups(pplayer));
}
guiManager.transition(new GuiInventoryManageGroups(pplayer, pageNumber));
}));
this.close();
});

View File

@ -114,7 +114,7 @@ public class GuiManager extends Manager implements Listener, Runnable {
if (!Setting.GUI_PRESETS_ONLY.getBoolean()) {
inventoryToOpen = new GuiInventoryDefault(pplayer);
} else {
inventoryToOpen = new GuiInventoryLoadPresetGroups(pplayer, true);
inventoryToOpen = new GuiInventoryLoadPresetGroups(pplayer, true, 1);
}
pplayer.getPlayer().openInventory(inventoryToOpen.getInventory());

View File

@ -4,7 +4,6 @@
# * The groups listed within this file will be #
# available to all players who have access to the #
# effect and style! #
# * The GUI is capable of displaying up to 28 groups. #
# * Feel free to create your own, they will be #
# available for users to select within the GUI! #
# * This file is not automatically updated. If you #