Add ability to specify Lore line length via Settings.

This commit is contained in:
BONNe 2019-02-11 15:29:19 +02:00
parent 2bbb4e5c87
commit b2201ec48d
17 changed files with 177 additions and 61 deletions

View File

@ -117,7 +117,9 @@ public class ChallengesImportManager
newChallenge.setDeployed(true);
ConfigurationSection details = chals.getConfigurationSection(challenge);
newChallenge.setFriendlyName(details.getString("friendlyname", challenge));
newChallenge.setDescription(GuiUtils.stringSplit(details.getString("description", "")));
newChallenge.setDescription(GuiUtils.stringSplit(
details.getString("description", ""),
this.addon.getChallengesSettings().getLoreLineLength()));
newChallenge.setIcon(ItemParser.parse(details.getString("icon", "") + ":1"));
if (details.getString("type", "").equalsIgnoreCase("level"))

View File

@ -22,25 +22,36 @@ public class Settings implements DataObject
@ConfigComment("Reset Challenges - if this is true, player's challenges will reset when they")
@ConfigComment("reset an island or if they are kicked or leave a team. Prevents exploiting the")
@ConfigComment("challenges by doing them repeatedly.")
@ConfigEntry(path = "reset-challenges")
private boolean resetChallenges = true;
@ConfigComment("")
@ConfigComment("Broadcast 1st time challenge completion messages to all players.")
@ConfigComment("Change to false if the spam becomes too much.")
@ConfigEntry(path = "broadcast-messages")
private boolean broadcastMessages = true;
@ConfigComment("")
@ConfigComment("Remove non-repeatable challenges from the challenge GUI when complete.")
@ConfigEntry(path = "remove-complete-one-time-challenges")
private boolean removeCompleteOneTimeChallenges = false;
@ConfigComment("")
@ConfigComment("Add enchanted glow to completed challenges")
@ConfigEntry(path = "add-completed-glow")
private boolean addCompletedGlow = true;
@ConfigComment("")
@ConfigComment("This indicate if free challenges must be at the start (true) or at the end (false) of list.")
@ConfigEntry(path = "free-challenges-first")
private boolean freeChallengesFirst = true;
@ConfigComment("")
@ConfigComment("This allows to change lore description line length. By default it is 25, but some server")
@ConfigComment("owners may like it to be larger.")
@ConfigEntry(path = "lore-length")
private int loreLineLength = 25;
@ConfigComment("")
@ConfigComment("This list stores GameModes in which Challenges addon should not work.")
@ConfigComment("To disable addon it is necessary to write its name in new line that starts with -. Example:")
@ -122,6 +133,16 @@ public class Settings implements DataObject
}
/**
* This method returns the loreLineLength object.
* @return the loreLineLength object.
*/
public int getLoreLineLength()
{
return loreLineLength;
}
@Override
public void setUniqueId(String uniqueId)
{
@ -181,4 +202,14 @@ public class Settings implements DataObject
{
this.freeChallengesFirst = freeChallengesFirst;
}
/**
* This method sets the loreLineLength object value.
* @param loreLineLength the loreLineLength object new value.
*/
public void setLoreLineLength(int loreLineLength)
{
this.loreLineLength = loreLineLength;
}
}

View File

@ -132,7 +132,9 @@ public class ChallengesPanels {
PanelItem item = new PanelItemBuilder()
.icon(new ItemStack(Material.ENCHANTED_BOOK))
.name(name)
.description(GuiUtils.stringSplit(user.getTranslation("challenges.navigation","[level]",name)))
.description(GuiUtils.stringSplit(
user.getTranslation("challenges.navigation","[level]",name),
this.addon.getChallengesSettings().getLoreLineLength()))
.clickHandler((p, u, c, s) -> {
u.closeInventory();
u.performCommand(label + " " + ChallengesCommand.CHALLENGE_COMMAND + " " + status.getLevel().getUniqueId());
@ -146,7 +148,11 @@ public class ChallengesPanels {
PanelItem item = new PanelItemBuilder()
.icon(new ItemStack(Material.BOOK))
.name(name)
.description(GuiUtils.stringSplit(user.getTranslation("challenges.to-complete", "[challengesToDo]",String.valueOf(previousStatus != null ? previousStatus.getNumberOfChallengesStillToDo() : ""), "[thisLevel]", previousLevelName)))
.description(GuiUtils.stringSplit(
user.getTranslation("challenges.to-complete",
"[challengesToDo]", String.valueOf(previousStatus != null ? previousStatus.getNumberOfChallengesStillToDo() : ""),
"[thisLevel]", previousLevelName),
this.addon.getChallengesSettings().getLoreLineLength()))
.build();
panelBuilder.item(item);
}
@ -236,6 +242,7 @@ public class ChallengesPanels {
}
private Collection<? extends String> splitTrans(User user, String string, String...strings) {
return GuiUtils.stringSplit(user.getTranslation(string, strings));
return GuiUtils.stringSplit(user.getTranslation(string, strings),
this.addon.getChallengesSettings().getLoreLineLength());
}
}

View File

@ -184,7 +184,9 @@ public class ChallengesPanels2 {
PanelItem item = new PanelItemBuilder()
.icon(new ItemStack(Material.ENCHANTED_BOOK))
.name(name)
.description(GuiUtils.stringSplit(requester.getTranslation("challenges.navigation","[level]",name)))
.description(GuiUtils.stringSplit(
requester.getTranslation("challenges.navigation","[level]",name),
this.addon.getChallengesSettings().getLoreLineLength()))
.clickHandler((p, u, c, s) -> {
u.closeInventory();
u.performCommand(label + " " + ChallengesCommand.CHALLENGE_COMMAND + " " + status.getLevel().getUniqueId());
@ -198,7 +200,10 @@ public class ChallengesPanels2 {
PanelItem item = new PanelItemBuilder()
.icon(new ItemStack(Material.BOOK))
.name(name)
.description(GuiUtils.stringSplit(requester.getTranslation("challenges.to-complete", "[challengesToDo]",String.valueOf(previousStatus != null ? previousStatus.getNumberOfChallengesStillToDo() : ""), "[thisLevel]", previousLevelName)))
.description(GuiUtils.stringSplit(requester.getTranslation("challenges.to-complete",
"[challengesToDo]", String.valueOf(previousStatus != null ? previousStatus.getNumberOfChallengesStillToDo() : ""),
"[thisLevel]", previousLevelName),
this.addon.getChallengesSettings().getLoreLineLength()))
.build();
panelBuilder.item(item);
}
@ -309,6 +314,7 @@ public class ChallengesPanels2 {
}
private Collection<? extends String> splitTrans(User user, String string, String...strings) {
return GuiUtils.stringSplit(user.getTranslation(string, strings));
return GuiUtils.stringSplit(user.getTranslation(string, strings),
this.addon.getChallengesSettings().getLoreLineLength());
}
}

View File

@ -280,7 +280,7 @@ public class EditChallengeGUI extends CommonGUI
return null;
}
return new PanelItem(icon, name, GuiUtils.stringSplit(description), glow, clickHandler, false);
return new PanelItem(icon, name, GuiUtils.stringSplit(description, this.addon.getChallengesSettings().getLoreLineLength()), glow, clickHandler, false);
}
@ -297,6 +297,8 @@ public class EditChallengeGUI extends CommonGUI
boolean glow;
PanelItem.ClickHandler clickHandler;
final int lineLength = this.addon.getChallengesSettings().getLoreLineLength();
switch (button)
{
case TYPE:
@ -408,7 +410,7 @@ public class EditChallengeGUI extends CommonGUI
description = Collections.emptyList();
icon = new ItemStack(Material.WRITTEN_BOOK);
clickHandler = (panel, user, clickType, slot) -> {
new StringListGUI(this.user, this.challenge.getDescription(), (status, value) -> {
new StringListGUI(this.user, this.challenge.getDescription(), lineLength, (status, value) -> {
if (status)
{
this.challenge.setDescription(value);
@ -644,7 +646,7 @@ public class EditChallengeGUI extends CommonGUI
description = new ArrayList<>(this.challenge.getRequiredPermissions());
icon = new ItemStack(Material.REDSTONE_LAMP);
clickHandler = (panel, user, clickType, slot) -> {
new StringListGUI(this.user, this.challenge.getRequiredPermissions(), (status, value) -> {
new StringListGUI(this.user, this.challenge.getRequiredPermissions(), lineLength, (status, value) -> {
if (status)
{
this.challenge.setRequiredPermissions(new HashSet<>(value));
@ -671,7 +673,7 @@ public class EditChallengeGUI extends CommonGUI
description = values;
icon = new ItemStack(Material.CHEST);
clickHandler = (panel, user, clickType, slot) -> {
new ItemSwitchGUI(this.user, this.challenge.getRequiredItems(), (status, value) -> {
new ItemSwitchGUI(this.user, this.challenge.getRequiredItems(), lineLength, (status, value) -> {
if (status)
{
this.challenge.setRequiredItems(value);
@ -765,7 +767,7 @@ public class EditChallengeGUI extends CommonGUI
{
icon = new ItemStack(Material.BEACON);
clickHandler = (panel, user, clickType, slot) -> {
new NumberGUI(this.user, (int) this.challenge.getRequiredIslandLevel(), (status, value) -> {
new NumberGUI(this.user, (int) this.challenge.getRequiredIslandLevel(), lineLength, (status, value) -> {
if (status)
{
this.challenge.setRequiredIslandLevel(value);
@ -886,7 +888,7 @@ public class EditChallengeGUI extends CommonGUI
description = values;
icon = new ItemStack(Material.CHEST);
clickHandler = (panel, user, clickType, slot) -> {
new ItemSwitchGUI(this.user, this.challenge.getRewardItems(), (status, value) -> {
new ItemSwitchGUI(this.user, this.challenge.getRewardItems(), lineLength, (status, value) -> {
if (status)
{
this.challenge.setRewardItems(value);
@ -962,7 +964,7 @@ public class EditChallengeGUI extends CommonGUI
description = this.challenge.getRewardCommands();
icon = new ItemStack(Material.COMMAND_BLOCK);
clickHandler = (panel, user, clickType, slot) -> {
new StringListGUI(this.user, this.challenge.getRewardCommands(), (status, value) -> {
new StringListGUI(this.user, this.challenge.getRewardCommands(), lineLength, (status, value) -> {
if (status)
{
this.challenge.setRewardCommands(value);
@ -1057,7 +1059,7 @@ public class EditChallengeGUI extends CommonGUI
description = values;
icon = new ItemStack(Material.TRAPPED_CHEST);
clickHandler = (panel, user, clickType, slot) -> {
new ItemSwitchGUI(this.user, this.challenge.getRepeatItemReward(), (status, value) -> {
new ItemSwitchGUI(this.user, this.challenge.getRepeatItemReward(), lineLength, (status, value) -> {
if (status)
{
this.challenge.setRepeatItemReward(value);
@ -1136,7 +1138,7 @@ public class EditChallengeGUI extends CommonGUI
description = this.challenge.getRepeatRewardCommands();
icon = new ItemStack(Material.COMMAND_BLOCK);
clickHandler = (panel, user, clickType, slot) -> {
new StringListGUI(this.user, this.challenge.getRepeatRewardCommands(), (status, value) -> {
new StringListGUI(this.user, this.challenge.getRepeatRewardCommands(), lineLength, (status, value) -> {
if (status)
{
this.challenge.setRepeatRewardCommands(value);
@ -1154,7 +1156,7 @@ public class EditChallengeGUI extends CommonGUI
return null;
}
return new PanelItem(icon, name, GuiUtils.stringSplit(description), glow, clickHandler, false);
return new PanelItem(icon, name, GuiUtils.stringSplit(description, lineLength), glow, clickHandler, false);
}

View File

@ -252,7 +252,7 @@ public class EditLevelGUI extends CommonGUI
return null;
}
return new PanelItem(icon, name, GuiUtils.stringSplit(description), glow, clickHandler, false);
return new PanelItem(icon, name, GuiUtils.stringSplit(description, this.addon.getChallengesSettings().getLoreLineLength()), glow, clickHandler, false);
}
@ -265,7 +265,9 @@ public class EditLevelGUI extends CommonGUI
{
return new PanelItemBuilder().
name(challenge.getFriendlyName()).
description(GuiUtils.stringSplit(challenge.getDescription())).
description(GuiUtils.stringSplit(
challenge.getDescription(),
this.addon.getChallengesSettings().getLoreLineLength())).
icon(challenge.getIcon()).
clickHandler((panel, user1, clickType, slot) -> {
// Open challenges edit screen.
@ -297,6 +299,8 @@ public class EditLevelGUI extends CommonGUI
boolean glow;
PanelItem.ClickHandler clickHandler;
final int lineLength = this.addon.getChallengesSettings().getLoreLineLength();
switch (button)
{
case NAME:
@ -447,7 +451,7 @@ public class EditLevelGUI extends CommonGUI
description = values;
icon = new ItemStack(Material.CHEST);
clickHandler = (panel, user, clickType, slot) -> {
new ItemSwitchGUI(this.user, this.challengeLevel.getRewardItems(), (status, value) -> {
new ItemSwitchGUI(this.user, this.challengeLevel.getRewardItems(), lineLength, (status, value) -> {
if (status)
{
this.challengeLevel.setRewardItems(value);
@ -523,7 +527,7 @@ public class EditLevelGUI extends CommonGUI
description = this.challengeLevel.getRewardCommands();
icon = new ItemStack(Material.COMMAND_BLOCK);
clickHandler = (panel, user, clickType, slot) -> {
new StringListGUI(this.user, this.challengeLevel.getRewardCommands(), (status, value) -> {
new StringListGUI(this.user, this.challengeLevel.getRewardCommands(), lineLength, (status, value) -> {
if (status)
{
this.challengeLevel.setRewardCommands(value);
@ -550,7 +554,7 @@ public class EditLevelGUI extends CommonGUI
List<Challenge> challengeList = manager.getAllChallenges(this.world);
challengeList.removeAll(manager.getLevelChallenges(this.challengeLevel));
new SelectChallengeGUI(this.user, challengeList, (status, value) -> {
new SelectChallengeGUI(this.user, challengeList, lineLength, (status, value) -> {
if (status)
{
manager.addChallengeToLevel(value, this.challengeLevel);
@ -572,7 +576,7 @@ public class EditLevelGUI extends CommonGUI
clickHandler = (panel, user, clickType, slot) -> {
ChallengesManager manager = this.addon.getChallengesManager();
new SelectChallengeGUI(this.user, manager.getLevelChallenges(this.challengeLevel), (status, value) -> {
new SelectChallengeGUI(this.user, manager.getLevelChallenges(this.challengeLevel), lineLength, (status, value) -> {
if (status)
{
manager.removeChallengeFromLevel(value, this.challengeLevel);
@ -590,7 +594,7 @@ public class EditLevelGUI extends CommonGUI
return null;
}
return new PanelItem(icon, name, GuiUtils.stringSplit(description), glow, clickHandler, false);
return new PanelItem(icon, name, GuiUtils.stringSplit(description, lineLength), glow, clickHandler, false);
}

View File

@ -9,6 +9,7 @@ import world.bentobox.bentobox.api.panels.builders.PanelItemBuilder;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.challenges.ChallengesAddon;
import world.bentobox.challenges.panel.CommonGUI;
import world.bentobox.challenges.panel.util.NumberGUI;
import world.bentobox.challenges.utils.GuiUtils;
@ -61,12 +62,13 @@ public class EditSettingsGUI extends CommonGUI
PanelBuilder panelBuilder = new PanelBuilder().user(this.user).name(
this.user.getTranslation("challenges.gui.admin.settings-title"));
final int lineLength = this.addon.getChallengesSettings().getLoreLineLength();
GuiUtils.fillBorder(panelBuilder);
// resetChallenges
panelBuilder.item(19, new PanelItemBuilder().
name(this.user.getTranslation("challenges.gui.admin.buttons.reset")).
description(GuiUtils.stringSplit(this.user.getTranslation("challenges.gui.admin.descriptions.reset"))).
description(GuiUtils.stringSplit(this.user.getTranslation("challenges.gui.admin.descriptions.reset"), lineLength)).
icon(Material.LAVA_BUCKET).
clickHandler((panel, user1, clickType, i) -> {
this.addon.getChallengesSettings().setResetChallenges(
@ -80,7 +82,7 @@ public class EditSettingsGUI extends CommonGUI
// broadcastMessages
panelBuilder.item(20, new PanelItemBuilder().
name(this.user.getTranslation("challenges.gui.admin.buttons.broadcast")).
description(GuiUtils.stringSplit(this.user.getTranslation("challenges.gui.admin.descriptions.broadcast"))).
description(GuiUtils.stringSplit(this.user.getTranslation("challenges.gui.admin.descriptions.broadcast"), lineLength)).
icon(Material.JUKEBOX).
clickHandler((panel, user1, clickType, i) -> {
this.addon.getChallengesSettings().setBroadcastMessages(
@ -94,7 +96,7 @@ public class EditSettingsGUI extends CommonGUI
// removeCompleteOneTimeChallenges
panelBuilder.item(21, new PanelItemBuilder().
name(this.user.getTranslation("challenges.gui.admin.buttons.remove-on-complete")).
description(GuiUtils.stringSplit(this.user.getTranslation("challenges.gui.admin.descriptions.remove-on-complete"))).
description(GuiUtils.stringSplit(this.user.getTranslation("challenges.gui.admin.descriptions.remove-on-complete"), lineLength)).
icon(Material.MAGMA_BLOCK).
clickHandler((panel, user1, clickType, i) -> {
this.addon.getChallengesSettings().setRemoveCompleteOneTimeChallenges(
@ -108,7 +110,7 @@ public class EditSettingsGUI extends CommonGUI
// addCompletedGlow
panelBuilder.item(22, new PanelItemBuilder().
name(this.user.getTranslation("challenges.gui.admin.buttons.glow")).
description(GuiUtils.stringSplit(this.user.getTranslation("challenges.gui.admin.descriptions.glow"))).
description(GuiUtils.stringSplit(this.user.getTranslation("challenges.gui.admin.descriptions.glow"), lineLength)).
icon(Material.GLOWSTONE).
clickHandler((panel, user1, clickType, i) -> {
this.addon.getChallengesSettings().setAddCompletedGlow(
@ -122,7 +124,7 @@ public class EditSettingsGUI extends CommonGUI
// freeChallengesAtTheTop
panelBuilder.item(23, new PanelItemBuilder().
name(this.user.getTranslation("challenges.gui.admin.buttons.free-challenges")).
description(GuiUtils.stringSplit(this.user.getTranslation("challenges.gui.admin.descriptions.free-challenges"))).
description(GuiUtils.stringSplit(this.user.getTranslation("challenges.gui.admin.descriptions.free-challenges"), lineLength)).
icon(Material.FILLED_MAP).
clickHandler((panel, user1, clickType, i) -> {
this.addon.getChallengesSettings().setFreeChallengesFirst(
@ -133,6 +135,29 @@ public class EditSettingsGUI extends CommonGUI
glow(this.addon.getChallengesSettings().isFreeChallengesFirst()).
build());
// Lore line length
panelBuilder.item(23, new PanelItemBuilder().
name(this.user.getTranslation("challenges.gui.admin.buttons.lore-length")).
description(GuiUtils.stringSplit(this.user.getTranslation("challenges.gui.admin.descriptions.lore-length"), lineLength)).
icon(Material.ANVIL).
clickHandler((panel, user1, clickType, i) -> {
new NumberGUI(this.user,
this.addon.getChallengesSettings().getLoreLineLength(),
0,
(status, value) -> {
if (status)
{
this.addon.getChallengesSettings().setLoreLineLength(value);
}
this.build();
});
return true;
}).
glow(this.addon.getChallengesSettings().isFreeChallengesFirst()).
build());
// Return Button
panelBuilder.item(44, this.returnButton);

View File

@ -134,7 +134,8 @@ public class ListChallengesGUI extends CommonGUI
{
PanelItemBuilder itemBuilder = new PanelItemBuilder().
name(challenge.getFriendlyName()).
description(GuiUtils.stringSplit(challenge.getDescription())).
description(GuiUtils.stringSplit(challenge.getDescription(),
this.addon.getChallengesSettings().getLoreLineLength())).
icon(challenge.getIcon()).
glow(challenge.isDeployed());

View File

@ -134,7 +134,8 @@ public class ListLevelsGUI extends CommonGUI
{
PanelItemBuilder itemBuilder = new PanelItemBuilder().
name(challengeLevel.getFriendlyName()).
description(GuiUtils.stringSplit(challengeLevel.getUnlockMessage())).
description(GuiUtils.stringSplit(challengeLevel.getUnlockMessage(),
this.addon.getChallengesSettings().getLoreLineLength())).
icon(challengeLevel.getIcon()).
glow(false);

View File

@ -170,6 +170,8 @@ public class ListUsersGUI extends CommonGUI
*/
private PanelItem createPlayerIcon(Player player)
{
int lineLength = this.addon.getChallengesSettings().getLoreLineLength();
if (this.addon.getIslands().hasIsland(this.world, player.getUniqueId()))
{
return new PanelItemBuilder().name(player.getName()).icon(player.getName()).clickHandler(
@ -179,7 +181,7 @@ public class ListUsersGUI extends CommonGUI
switch (this.operationMode)
{
case COMPLETE:
new SelectChallengeGUI(this.user, manager.getAllChallenges(this.world), (status, value) -> {
new SelectChallengeGUI(this.user, manager.getAllChallenges(this.world), lineLength, (status, value) -> {
if (status)
{
manager.setChallengeComplete(User.getInstance(player), value);
@ -191,7 +193,7 @@ public class ListUsersGUI extends CommonGUI
});
break;
case RESET:
new SelectChallengeGUI(this.user, manager.getAllChallenges(this.world), (status, value) -> {
new SelectChallengeGUI(this.user, manager.getAllChallenges(this.world), lineLength, (status, value) -> {
if (status)
{
manager.resetChallenge(User.getInstance(player), value);
@ -222,7 +224,7 @@ public class ListUsersGUI extends CommonGUI
return new PanelItemBuilder().
name(player.getName()).
icon(Material.BARRIER).
description(GuiUtils.stringSplit(this.user.getTranslation("general.errors.player-has-no-island"))).
description(GuiUtils.stringSplit(this.user.getTranslation("general.errors.player-has-no-island"), lineLength)).
clickHandler((panel, user1, clickType, slot) -> false).
build();
}
@ -273,7 +275,7 @@ public class ListUsersGUI extends CommonGUI
name(this.user.getTranslation("challenges.gui.admin.buttons.toggle-users",
"[value]",
this.user.getTranslation("challenges.gui.admin.descriptions." + ViewMode.values()[this.modeIndex].name().toLowerCase()))).
description(GuiUtils.stringSplit(values)).
description(GuiUtils.stringSplit(values, this.addon.getChallengesSettings().getLoreLineLength())).
icon(Material.STONE_BUTTON).
clickHandler(
(panel, user1, clickType, slot) -> {

View File

@ -343,7 +343,8 @@ public class ChallengesGUI extends CommonGUI
return new PanelItemBuilder().
icon(challenge.getIcon()).
name(challenge.getFriendlyName().isEmpty() ? challenge.getUniqueId() : challenge.getFriendlyName()).
description(GuiUtils.stringSplit(this.createChallengeDescription(challenge))).
description(GuiUtils.stringSplit(this.createChallengeDescription(challenge),
this.addon.getChallengesSettings().getLoreLineLength())).
clickHandler((panel, user1, clickType, slot) -> {
if (TryToComplete.complete(this.addon,
this.user,
@ -523,7 +524,9 @@ public class ChallengesGUI extends CommonGUI
if (level.isUnlocked())
{
icon = level.getLevel().getIcon();
description = GuiUtils.stringSplit(this.user.getTranslation("challenges.navigation", "[level]", name));
description = GuiUtils.stringSplit(
this.user.getTranslation("challenges.navigation", "[level]", name),
this.addon.getChallengesSettings().getLoreLineLength());
clickHandler = (panel, user1, clickType, slot) -> {
this.lastSelectedLevel = level;
@ -543,7 +546,8 @@ public class ChallengesGUI extends CommonGUI
description = GuiUtils.stringSplit(
this.user.getTranslation("challenges.to-complete",
"[challengesToDo]", Integer.toString(level.getNumberOfChallengesStillToDo()),
"[thisLevel]", level.getPreviousLevel().getFriendlyName()));
"[thisLevel]", level.getPreviousLevel().getFriendlyName()),
this.addon.getChallengesSettings().getLoreLineLength());
clickHandler = null;
glow = false;

View File

@ -22,11 +22,12 @@ import world.bentobox.challenges.utils.GuiUtils;
*/
public class ItemSwitchGUI
{
public ItemSwitchGUI(User user, List<ItemStack> itemStacks, BiConsumer<Boolean, List<ItemStack>> consumer)
public ItemSwitchGUI(User user, List<ItemStack> itemStacks, int lineLength, BiConsumer<Boolean, List<ItemStack>> consumer)
{
this.consumer = consumer;
this.user = user;
this.itemStacks = itemStacks;
this.lineLength = lineLength;
this.build();
}
@ -124,7 +125,7 @@ public class ItemSwitchGUI
return null;
}
return new PanelItem(icon, name, GuiUtils.stringSplit(description), false, clickHandler, false);
return new PanelItem(icon, name, GuiUtils.stringSplit(description, this.lineLength), false, clickHandler, false);
}
@ -233,4 +234,9 @@ public class ItemSwitchGUI
* Consumer that returns item stacks on save action.
*/
private BiConsumer<Boolean, List<ItemStack>> consumer;
/**
* This variable stores how large line can be, before warp it.
*/
private int lineLength;
}

View File

@ -21,19 +21,19 @@ import world.bentobox.challenges.utils.GuiUtils;
*/
public class NumberGUI
{
public NumberGUI(User user, int value, BiConsumer<Boolean, Integer> consumer)
public NumberGUI(User user, int value, int lineLength, BiConsumer<Boolean, Integer> consumer)
{
this(user, value, Integer.MIN_VALUE, Integer.MAX_VALUE, consumer);
this(user, value, Integer.MIN_VALUE, Integer.MAX_VALUE, lineLength, consumer);
}
public NumberGUI(User user, int value, int minValue, BiConsumer<Boolean, Integer> consumer)
public NumberGUI(User user, int value, int minValue, int lineLength, BiConsumer<Boolean, Integer> consumer)
{
this(user, value, minValue, Integer.MAX_VALUE, consumer);
this(user, value, minValue, Integer.MAX_VALUE, lineLength, consumer);
}
public NumberGUI(User user, int value, int minValue, int maxValue, BiConsumer<Boolean, Integer> consumer)
public NumberGUI(User user, int value, int minValue, int maxValue, int lineLength, BiConsumer<Boolean, Integer> consumer)
{
this.user = user;
this.value = value;
@ -44,6 +44,8 @@ public class NumberGUI
this.currentOperation = Button.SET;
this.lineLength = lineLength;
this.build();
}
@ -238,7 +240,7 @@ public class NumberGUI
return null;
}
return new PanelItem(icon, name, GuiUtils.stringSplit(description), glow, clickHandler, false);
return new PanelItem(icon, name, GuiUtils.stringSplit(description, this.lineLength), glow, clickHandler, false);
}
@ -417,4 +419,9 @@ public class NumberGUI
* This variable holds which operation now is processed.
*/
private Button currentOperation;
/**
* This variable stores how large line can be, before warp it.
*/
private int lineLength;
}

View File

@ -18,11 +18,12 @@ import world.bentobox.challenges.utils.GuiUtils;
*/
public class SelectChallengeGUI
{
public SelectChallengeGUI(User user, List<Challenge> challengesList, BiConsumer<Boolean, Challenge> consumer)
public SelectChallengeGUI(User user, List<Challenge> challengesList, int lineLength, BiConsumer<Boolean, Challenge> consumer)
{
this.consumer = consumer;
this.user = user;
this.challengesList = challengesList;
this.lineLength = lineLength;
this.build(0);
}
@ -127,7 +128,7 @@ public class SelectChallengeGUI
{
return new PanelItemBuilder().
name(challenge.getFriendlyName()).
description(GuiUtils.stringSplit(challenge.getDescription())).
description(GuiUtils.stringSplit(challenge.getDescription(), this.lineLength)).
icon(challenge.getIcon()).
clickHandler((panel, user1, clickType, slot) -> {
this.consumer.accept(true, challenge);
@ -155,4 +156,9 @@ public class SelectChallengeGUI
* Current value.
*/
private List<Challenge> challengesList;
/**
* This variable stores how large line can be, before warp it.
*/
private int lineLength;
}

View File

@ -24,17 +24,18 @@ import world.bentobox.challenges.utils.GuiUtils;
*/
public class StringListGUI
{
public StringListGUI(User user, Collection<String> value, BiConsumer<Boolean, List<String>> consumer)
public StringListGUI(User user, Collection<String> value, int lineLength, BiConsumer<Boolean, List<String>> consumer)
{
this(user, new ArrayList<>(value), consumer);
this(user, new ArrayList<>(value), lineLength, consumer);
}
public StringListGUI(User user, List<String> value, BiConsumer<Boolean, List<String>> consumer)
public StringListGUI(User user, List<String> value, int lineLength, BiConsumer<Boolean, List<String>> consumer)
{
this.consumer = consumer;
this.user = user;
this.value = value;
this.lineLength = lineLength;
if (this.value.size() > 21)
{
@ -177,7 +178,7 @@ public class StringListGUI
return null;
}
return new PanelItem(icon, name, GuiUtils.stringSplit(description), false, clickHandler, false);
return new PanelItem(icon, name, GuiUtils.stringSplit(description, this.lineLength), false, clickHandler, false);
}
@ -243,4 +244,9 @@ public class StringListGUI
* Current value.
*/
private List<String> value;
/**
* This variable stores how large line can be, before warp it.
*/
private int lineLength;
}

View File

@ -370,9 +370,10 @@ public class GuiUtils
* Simple splitter
*
* @param string - string to be split
* @param warpLength - whn warp should be affected.
* @return list of split strings
*/
public static List<String> stringSplit(String string)
public static List<String> stringSplit(String string, int warpLength)
{
// Remove all ending lines from string.
string = string.replaceAll("([\\r\\n])", "\\|");
@ -381,7 +382,7 @@ public class GuiUtils
List<String> result = new ArrayList<>();
Arrays.stream(string.split("\\|")).
map(line -> Arrays.asList(WordUtils.wrap(line, 25).split(System.getProperty("line.separator")))).
map(line -> Arrays.asList(WordUtils.wrap(line, warpLength).split(System.getProperty("line.separator")))).
forEach(result::addAll);
return result;
@ -391,9 +392,10 @@ public class GuiUtils
/**
* Simple splitter for all strings in list.
* @param stringList - list of string to be split
* @param warpLength - whn warp should be affected.
* @return list of split strings
*/
public static List<String> stringSplit(List<String> stringList)
public static List<String> stringSplit(List<String> stringList, int warpLength)
{
if (stringList.isEmpty())
{
@ -401,7 +403,7 @@ public class GuiUtils
}
List<String> newList = new ArrayList<>(stringList.size());
stringList.stream().map(GuiUtils::stringSplit).forEach(newList::addAll);
stringList.stream().map(string -> GuiUtils.stringSplit(string, warpLength)).forEach(newList::addAll);
return newList;
}
}

View File

@ -7,20 +7,24 @@
# Reset Challenges - if this is true, player's challenges will reset when they
# reset an island or if they are kicked or leave a team. Prevents exploiting the
# challenges by doing them repeatedly.
resetChallenges: true
reset-challenges: true
#
# Broadcast 1st time challenge completion messages to all players.
# Change to false if the spam becomes too much.
broadcastMessages: true
broadcast-messages: true
#
# Remove non-repeatable challenges from the challenge GUI when complete.
removeCompleteOneTimeChallenges: false
remove-complete-one-time-challenges: false
#
# Add enchanted glow to completed challenges
addCompletedGlow: true
add-completed-glow: true
#
# This indicate if free challenges must be at the start (true) or at the end (false) of list.
freeChallengesFirst: false
free-challenges-first: true
#
# This allows to change lore description line length. By default it is 25, but some server
# owners may like it to be larger.
lore-length: 25
#
# This list stores GameModes in which Challenges addon should not work.
# To disable addon it is necessary to write its name in new line that starts with -. Example: