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/ /bin/
/docs/ /docs/
/images/ /images/
/LocaleTransformer

View file

@ -93,7 +93,7 @@ public class GuiInventoryDefault extends GuiInventory {
GuiIcon.GROUPS.get(), GuiIcon.GROUPS.get(),
localeManager.getLocaleMessage("gui-color-icon-name") + localeManager.getLocaleMessage("gui-manage-your-groups"), 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")}, 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); this.actionButtons.add(manageYourGroupsButton);
} }
@ -104,7 +104,7 @@ public class GuiInventoryDefault extends GuiInventory {
GuiIcon.PRESET_GROUPS.get(), GuiIcon.PRESET_GROUPS.get(),
localeManager.getLocaleMessage("gui-color-icon-name") + localeManager.getLocaleMessage("gui-load-a-preset-group"), 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")}, 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); this.actionButtons.add(loadPresetGroups);
} }

View file

@ -16,11 +16,12 @@ import dev.esophose.playerparticles.util.StringPlaceholders;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
public class GuiInventoryLoadPresetGroups extends GuiInventory { 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"))); 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); LocaleManager localeManager = PlayerParticles.getInstance().getManager(LocaleManager.class);
@ -28,32 +29,39 @@ public class GuiInventoryLoadPresetGroups extends GuiInventory {
this.fillBorder(BorderColor.GREEN); 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 nextWrap = 17;
int maxIndex = 43; 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()); List<ParticlePair> particles = new ArrayList<>(group.getGroup().getParticles().values());
particles.sort(Comparator.comparingInt(ParticlePair::getId)); particles.sort(Comparator.comparingInt(ParticlePair::getId));
String[] lore = new String[particles.size() + 1]; 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())); 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) { for (ParticlePair particle : particles) {
StringPlaceholders stringPlaceholders = StringPlaceholders.builder("id", particle.getId()) StringPlaceholders stringPlaceholders = StringPlaceholders.builder("id", particle.getId())
.addPlaceholder("effect", ParticleUtils.formatName(particle.getEffect().getName())) .addPlaceholder("effect", ParticleUtils.formatName(particle.getEffect().getName()))
.addPlaceholder("style", ParticleUtils.formatName(particle.getStyle().getName())) .addPlaceholder("style", ParticleUtils.formatName(particle.getStyle().getName()))
.addPlaceholder("data", particle.getDataString()) .addPlaceholder("data", particle.getDataString())
.build(); .build();
lore[i] = localeManager.getLocaleMessage("gui-color-info") + localeManager.getLocaleMessage("gui-particle-info", stringPlaceholders); lore[n] = localeManager.getLocaleMessage("gui-color-info") + localeManager.getLocaleMessage("gui-particle-info", stringPlaceholders);
i++; n++;
} }
// Load Group Buttons // 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(); ParticleGroup activeGroup = pplayer.getActiveParticleGroup();
activeGroup.getParticles().clear(); activeGroup.getParticles().clear();
for (ParticlePair particle : particles) { for (ParticlePair particle : particles) {
@ -68,12 +76,34 @@ public class GuiInventoryLoadPresetGroups extends GuiInventory {
}); });
this.actionButtons.add(groupButton); this.actionButtons.add(groupButton);
index++; slot++;
if (index == nextWrap) { // Loop around border if (slot == nextWrap) { // Loop around border
nextWrap += 9; 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) { if (!isEndPoint) {
@ -87,7 +117,7 @@ public class GuiInventoryLoadPresetGroups extends GuiInventory {
} else { } else {
// Reset Particles Button // Reset Particles Button
GuiActionButton resetParticles = new GuiActionButton( GuiActionButton resetParticles = new GuiActionButton(
49, INVENTORY_SIZE - 5,
GuiIcon.RESET.get(), GuiIcon.RESET.get(),
localeManager.getLocaleMessage("gui-color-icon-name") + localeManager.getLocaleMessage("gui-reset-particles"), localeManager.getLocaleMessage("gui-color-icon-name") + localeManager.getLocaleMessage("gui-reset-particles"),
new String[]{localeManager.getLocaleMessage("gui-color-unavailable") + localeManager.getLocaleMessage("gui-reset-particles-description")}, 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.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
public class GuiInventoryManageGroups extends GuiInventory { 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"))); 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); LocaleManager localeManager = PlayerParticles.getInstance().getManager(LocaleManager.class);
@ -31,35 +32,43 @@ public class GuiInventoryManageGroups extends GuiInventory {
this.fillBorder(BorderColor.BROWN); this.fillBorder(BorderColor.BROWN);
int index = 10; List<ParticleGroup> groups = pplayer.getParticleGroups().values().stream()
int nextWrap = 17; .filter(x -> !x.getName().equals(ParticleGroup.DEFAULT_NAME))
int maxIndex = 35; .sorted(Comparator.comparing(ParticleGroup::getName))
List<ParticleGroup> groups = new ArrayList<>(pplayer.getParticleGroups().values()); .collect(Collectors.toList());
groups.sort(Comparator.comparing(ParticleGroup::getName));
for (ParticleGroup group : groups) { int numberOfItems = groups.size();
if (group.getName().equals(ParticleGroup.DEFAULT_NAME)) continue; 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()); List<ParticlePair> particles = new ArrayList<>(group.getParticles().values());
particles.sort(Comparator.comparingInt(ParticlePair::getId)); particles.sort(Comparator.comparingInt(ParticlePair::getId));
String[] lore = new String[particles.size() + 2]; 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())); 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) { for (ParticlePair particle : particles) {
StringPlaceholders stringPlaceholders = StringPlaceholders.builder("id", particle.getId()) StringPlaceholders stringPlaceholders = StringPlaceholders.builder("id", particle.getId())
.addPlaceholder("effect", ParticleUtils.formatName(particle.getEffect().getName())) .addPlaceholder("effect", ParticleUtils.formatName(particle.getEffect().getName()))
.addPlaceholder("style", ParticleUtils.formatName(particle.getStyle().getName())) .addPlaceholder("style", ParticleUtils.formatName(particle.getStyle().getName()))
.addPlaceholder("data", particle.getDataString()) .addPlaceholder("data", particle.getDataString())
.build(); .build();
lore[i] = localeManager.getLocaleMessage("gui-color-info") + localeManager.getLocaleMessage("gui-particle-info", stringPlaceholders); lore[n] = localeManager.getLocaleMessage("gui-color-info") + localeManager.getLocaleMessage("gui-particle-info", stringPlaceholders);
i++; 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 // Load Group Buttons
GuiActionButton groupButton = new GuiActionButton( GuiActionButton groupButton = new GuiActionButton(
index, slot,
GuiIcon.GROUPS.get(), GuiIcon.GROUPS.get(),
localeManager.getLocaleMessage("gui-color-icon-name") + group.getName(), localeManager.getLocaleMessage("gui-color-icon-name") + group.getName(),
lore, lore,
@ -82,12 +91,34 @@ public class GuiInventoryManageGroups extends GuiInventory {
}); });
this.actionButtons.add(groupButton); this.actionButtons.add(groupButton);
index++; slot++;
if (index == nextWrap) { // Loop around border if (slot == nextWrap) { // Loop around border
nextWrap += 9; 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); boolean hasReachedMax = PlayerParticles.getInstance().getManager(PermissionManager.class).hasPlayerReachedMaxGroups(pplayer);
@ -109,17 +140,16 @@ public class GuiInventoryManageGroups extends GuiInventory {
// Save Group Button // Save Group Button
GuiActionButton saveGroupButton = new GuiActionButton( GuiActionButton saveGroupButton = new GuiActionButton(
40, INVENTORY_SIZE - 5,
GuiIcon.CREATE.get(), GuiIcon.CREATE.get(),
localeManager.getLocaleMessage("gui-color-icon-name") + localeManager.getLocaleMessage("gui-save-group"), localeManager.getLocaleMessage("gui-color-icon-name") + localeManager.getLocaleMessage("gui-save-group"),
lore, lore,
(button, isShiftClick) -> { (button, isShiftClick) -> {
if (hasReachedMax || !hasParticles) return; if (hasReachedMax || !hasParticles)
return;
PlayerChatHook.addHook(new PlayerChatHookData(pplayer.getUniqueId(), 15, (textEntered) -> { PlayerChatHook.addHook(new PlayerChatHookData(pplayer.getUniqueId(), 15, (textEntered) -> {
if (textEntered == null || textEntered.equalsIgnoreCase("cancel")) { if (textEntered != null && !textEntered.equalsIgnoreCase("cancel")) {
guiManager.transition(new GuiInventoryManageGroups(pplayer));
} else {
String groupName = textEntered.split(" ")[0]; String groupName = textEntered.split(" ")[0];
// Check that the groupName isn't the reserved name // 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)); localeManager.sendMessage(pplayer, "group-save-success", StringPlaceholders.single("name", groupName));
} }
guiManager.transition(new GuiInventoryManageGroups(pplayer));
} }
guiManager.transition(new GuiInventoryManageGroups(pplayer, pageNumber));
})); }));
this.close(); this.close();
}); });

View file

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

View file

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