Skip to content

Commit

Permalink
feat: allow items & titles of GUIs to be changed
Browse files Browse the repository at this point in the history
clickup: #2pcjvdy[pending release] ##2pcjvdk[pending release]
  • Loading branch information
mnewt00 committed Jul 27, 2022
1 parent bdc9e86 commit c33b380
Show file tree
Hide file tree
Showing 11 changed files with 205 additions and 117 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ plugins {
}

group = "dev.austech"
version = "2.0.1-SNAPSHOT"
version = "2.0.1"

repositories {
mavenLocal()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,23 @@

package dev.austech.betterreports.model.report.menu.creation;

import dev.austech.betterreports.BetterReports;
import dev.austech.betterreports.model.report.Report;
import dev.austech.betterreports.model.report.ReportManager;
import dev.austech.betterreports.util.PlaceholderUtil;
import dev.austech.betterreports.util.StackBuilder;
import dev.austech.betterreports.util.config.impl.GuiConfig;
import dev.austech.betterreports.util.config.impl.MainConfig;
import dev.austech.betterreports.util.menu.Menu;
import dev.austech.betterreports.util.menu.defaults.buttons.BackButton;
import dev.austech.betterreports.util.menu.layout.MenuButton;
import dev.austech.betterreports.util.xseries.XMaterial;
import lombok.RequiredArgsConstructor;
import org.bukkit.entity.Player;
import org.bukkit.inventory.meta.ItemMeta;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

@RequiredArgsConstructor
public class ConfirmReportMenu extends Menu {
Expand All @@ -60,47 +63,43 @@ public int getSize() {
public Map<Integer, MenuButton> getButtons(final Player player) {
final Map<Integer, MenuButton> buttons = new HashMap<>();

if (getToReturn() != null)
buttons.put(0, new BackButton(getToReturn()).setOnConfirm((e, p) -> success = true));

buttons.put(11, MenuButton.builder()
.stack(
StackBuilder.create(XMaterial.RED_WOOL)
.name("&c&lClick to cancel.")
)
.closeMenu(true)
.build());

buttons.put(13, MenuButton.builder()
.stack(
report.getType() == Report.Type.PLAYER ?
(
StackBuilder.create(XMaterial.BOOK)
.name("&7Report against &c" + report.getTarget().getName())
.lore(
"&7Reason: &c" + report.getReason()
)
.glow()
) :
(
StackBuilder.create(XMaterial.BOOK)
.name("&7Bug Report")
.lore(
"&7Reason: &c" + report.getReason()
)
.glow()
)
)
.build());

buttons.put(15, MenuButton.builder()
.stack(
StackBuilder.create(XMaterial.LIME_WOOL)
.name("&a&lClick to confirm report.")
)
.closeMenu(true)
.action((e, p) -> confirm())
.build());
final int backButtonSlot = GuiConfig.Values.MENU_CONFIRM_BACK_BUTTON.getInteger();
if (getToReturn() != null && backButtonSlot >= -1)
buttons.put(backButtonSlot, new BackButton(getToReturn()).setOnConfirm((e, p) -> success = true));

final HashMap<Integer, StackBuilder> stacks = new HashMap<>(GuiConfig.Values.MENU_CONFIRM_BUTTONS.getStackMap());

stacks.forEach((i, stack) -> {
final ItemMeta meta = stack.build().getItemMeta();

stack.name(PlaceholderUtil.applyPlaceholders(report, meta.getDisplayName()));

if (Objects.equals(stack.getType(), "DISPLAY_REPORT")) {
final String placeholder;

if (report.getType() == Report.Type.BUG) {
placeholder = BetterReports.getInstance().getConfigManager().getGuiConfig().getConfig().getString(GuiConfig.Values.MENU_CONFIRM_BUTTONS.getKey() + "." + i + ".bug-lore");
} else {
placeholder = BetterReports.getInstance().getConfigManager().getGuiConfig().getConfig().getString(GuiConfig.Values.MENU_CONFIRM_BUTTONS.getKey() + "." + i + ".player-lore");
}

if (placeholder != null && !placeholder.isEmpty())
stack.lore(PlaceholderUtil.applyPlaceholders(report, placeholder));

buttons.put(i, MenuButton.builder().stack(stack).build());
} else {
if (meta.hasLore())
stack.lore(PlaceholderUtil.applyPlaceholders(report, String.join("\n", meta.getLore())));

if (Objects.equals(stack.getType(), "CLOSE")) {
buttons.put(i, MenuButton.builder().stack(stack).closeMenu(true).build());
} else if (Objects.equals(stack.getType(), "CONFIRM")) {
buttons.put(i, MenuButton.builder().stack(stack).closeMenu(true).action((e, p) -> confirm()).build());
} else {
buttons.put(i, MenuButton.builder().stack(stack).build());
}
}
});

return buttons;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,19 @@
import dev.austech.betterreports.model.report.ReportManager;
import dev.austech.betterreports.util.Common;
import dev.austech.betterreports.util.ConversationUtil;
import dev.austech.betterreports.util.PlaceholderUtil;
import dev.austech.betterreports.util.StackBuilder;
import dev.austech.betterreports.util.config.impl.GuiConfig;
import dev.austech.betterreports.util.config.impl.MainConfig;
import dev.austech.betterreports.util.menu.Menu;
import dev.austech.betterreports.util.menu.layout.MenuButton;
import dev.austech.betterreports.util.xseries.XMaterial;
import org.bukkit.conversations.Prompt;
import org.bukkit.entity.Player;
import org.bukkit.inventory.meta.ItemMeta;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class ReportMenu extends Menu {
@Override
Expand All @@ -49,35 +52,49 @@ public String getTitle(final Player player) {
public Map<Integer, MenuButton> getButtons(final Player player) {
final Map<Integer, MenuButton> buttons = new HashMap<>();

final MenuButton bugButton = MenuButton.builder()
.stack(
StackBuilder.create(XMaterial.ORANGE_WOOL)
.name("&6Click to report a &l&nbug")
)
.action((e, p) -> reportBug(p))
.closeMenu(true)
.build();

final MenuButton playerButton = MenuButton.builder()
.stack(
StackBuilder.create(XMaterial.PLAYER_HEAD)
.name("&6Click to report a &l&nplayer")
)
.action((e, p) -> reportPlayer(p))
.build();

final boolean bugReports = ReportManager.getInstance().isBugReportsEnabled();
final boolean playerReports = ReportManager.getInstance().isPlayerReportsEnabled();

if (bugReports && !playerReports) {
buttons.put(4, bugButton);
} else if (!bugReports && playerReports) {
buttons.put(4, playerButton);
} else if (bugReports && playerReports) {
buttons.put(2, bugButton);
buttons.put(6, playerButton);
final HashMap<Integer, StackBuilder> stacks = new HashMap<>();

if (bugReports && !playerReports) { // Bug reports only
stacks.putAll(GuiConfig.Values.MENU_MAIN_BUTTONS_BUG_ONLY.getStackMap());
} else if (!bugReports && playerReports) { // Player reports only
stacks.putAll(GuiConfig.Values.MENU_MAIN_BUTTONS_PLAYER_ONLY.getStackMap());
} else {
stacks.putAll(GuiConfig.Values.MENU_MAIN_BUTTONS_ALL.getStackMap());
}

// for (final Map.Entry<Integer, StackBuilder> entry : stacks.entrySet()) {
//
// }

stacks.forEach((i, stack) -> {
final ItemMeta meta = stack.build().getItemMeta();

stack.name(PlaceholderUtil.applyPlaceholders(player, meta.getDisplayName()));
if (meta.hasLore())
stack.lore(PlaceholderUtil.applyPlaceholders(player, String.join("\n", meta.getLore())));

if (Objects.equals(stack.getType(), "BUG")) {
buttons.put(i, MenuButton.builder()
.stack(stack)
.action((e, p) -> reportBug(p))
.closeMenu(true)
.build());
} else if (Objects.equals(stack.getType(), "PLAYER")) {
buttons.put(i, MenuButton.builder()
.stack(stack)
.action((e, p) -> reportPlayer(p))
.build());
} else {
buttons.put(i, MenuButton.builder()
.stack(stack)
.closeMenu(true)
.build());
}
});

return buttons;
}

Expand All @@ -87,7 +104,7 @@ private void reportPlayer(final Player creator) {
return;
}

new SelectPlayerMenu().open(creator);
new SelectPlayerMenu().setReturn(this).open(creator);
}

public void reportBug(final Player creator) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@
import dev.austech.betterreports.model.report.menu.creation.reason.PlayerReportPagedReasonMenu;
import dev.austech.betterreports.util.Common;
import dev.austech.betterreports.util.ConversationUtil;
import dev.austech.betterreports.util.StackBuilder;
import dev.austech.betterreports.util.PlaceholderUtil;
import dev.austech.betterreports.util.TriConsumer;
import dev.austech.betterreports.util.config.impl.GuiConfig;
import dev.austech.betterreports.util.config.impl.MainConfig;
import dev.austech.betterreports.util.menu.defaults.ListPlayersMenu;
import dev.austech.betterreports.util.menu.defaults.buttons.BackButton;
import dev.austech.betterreports.util.menu.layout.MenuButton;
import dev.austech.betterreports.util.xseries.XMaterial;
import org.bukkit.Bukkit;
import org.bukkit.conversations.Prompt;
import org.bukkit.entity.Player;
Expand All @@ -48,14 +48,28 @@ protected TriConsumer<InventoryClickEvent, Player, Player> getAction() {
return (event, player, target) -> handle(player, target);
}

@Override
protected String getPlayerName(final Player player) {
return PlaceholderUtil.applyPlaceholders(player, GuiConfig.Values.MENU_SELECT_PLAYER_LIST_BUTTON_NAME.getString());
}

@Override
protected boolean shouldShowPlayer(final Player player) {
return !(GuiConfig.Values.MENU_SELECT_PLAYER_LIST_BUTTON_HIDE_VANISHED.getBoolean() && player.hasMetadata("vanished"));
}

@Override
public Map<Integer, MenuButton> getFixedButtons(final Player player) {
final Map<Integer, MenuButton> buttons = new HashMap<>();

final int backButtonSlot = GuiConfig.Values.MENU_SELECT_PLAYER_BACK_BUTTON.getInteger();
if (getToReturn() != null && backButtonSlot >= 0) {
buttons.put(backButtonSlot, new BackButton(getToReturn()));
}

buttons.put(7, MenuButton.builder()
.stack(
StackBuilder.create(XMaterial.NAME_TAG)
.name("&e&lEnter Name")
GuiConfig.Values.MENU_SELECT_PLAYER_CUSTOM_BUTTON.getStack()
)
.action((e, p) -> searchPlayer(p))
.closeMenu(true)
Expand All @@ -71,7 +85,7 @@ private void handle(final Player player, final Player target) {
return;
}

new PlayerReportPagedReasonMenu(player, target).open(player);
new PlayerReportPagedReasonMenu(player, target).setReturn(this).open(player);
}

private void searchPlayer(final Player player) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@
import dev.austech.betterreports.util.ConversationUtil;
import dev.austech.betterreports.util.PlaceholderUtil;
import dev.austech.betterreports.util.StackBuilder;
import dev.austech.betterreports.util.config.impl.GuiConfig;
import dev.austech.betterreports.util.config.impl.MainConfig;
import dev.austech.betterreports.util.menu.defaults.buttons.BackButton;
import dev.austech.betterreports.util.menu.defaults.paged.PagedMenu;
import dev.austech.betterreports.util.menu.layout.MenuButton;
import dev.austech.betterreports.util.xseries.XMaterial;
Expand Down Expand Up @@ -103,11 +105,15 @@ private String replacePlaceholders(final String name, final String string) {
public Map<Integer, MenuButton> getFixedButtons(final Player player) {
final Map<Integer, MenuButton> buttons = new HashMap<>();

final int backButtonSlot = GuiConfig.Values.MENU_REASON_BACK_BUTTON.getInteger();
if (getToReturn() != null && backButtonSlot >= 0) {
buttons.put(backButtonSlot, new BackButton(getToReturn()));
}

if (BetterReports.getInstance().getConfigManager().getReasonsConfig().getConfig().getBoolean("allow-custom-reason"))
buttons.put(7, MenuButton.builder()
.stack(
StackBuilder.create(XMaterial.NAME_TAG)
.name("&e&lCustom Reason")
GuiConfig.Values.MENU_REASON_CUSTOM_BUTTON.getStack()
)
.action((e, p) -> customReason())
.closeMenu(true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,14 @@

@UtilityClass
public class PlaceholderUtil {
public String applyPlaceholders(final Player player, final String string) {
return Common.color(
PlaceholderAPI.setPlaceholders(player, string)
.replace("{player}", player.getName())
.replace("{player_display}", player.getDisplayName())
);
}

public String applyPlaceholders(final Report report, final String string) {
final Player player = report.getCreator();
final String reason = report.getReason();
Expand All @@ -44,7 +52,10 @@ public String applyPlaceholders(final Report report, final String string) {
.replace("{creator}", player.getName())
.replace("{sender}", player.getName())
.replace("{reason}", reason)
.replace("{report}", reason);
.replace("{report}", reason)
.replace("{type}", report.getType().name().toUpperCase().charAt(0) + report.getType().name().substring(1).toLowerCase())
.replace("{type_upper}", report.getType().name().toUpperCase())
.replace("{type_lower}", report.getType().name().toLowerCase());

if (MainConfig.Values.COUNTER.getBoolean()) {
final Counter counter = BetterReports.getInstance().getCounter();
Expand Down
21 changes: 18 additions & 3 deletions src/main/java/dev/austech/betterreports/util/StackBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
package dev.austech.betterreports.util;

import dev.austech.betterreports.util.xseries.XMaterial;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.md_5.bungee.api.ChatColor;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemFlag;
Expand All @@ -40,20 +40,34 @@
import java.util.stream.Collectors;

@Getter
@AllArgsConstructor
@RequiredArgsConstructor
public class StackBuilder {
private ItemStack item;
private final ItemStack item;
private String type;

public static StackBuilder create(final XMaterial material) {
if (material == null || !material.isSupported()) {
throw new IllegalArgumentException("Material \"" + material + "\" is not supported");
}

return new StackBuilder(material.parseItem());
}

public static StackBuilder from(final ItemStack item) {
return new StackBuilder(item);
}

public void applyMeta(final Consumer<ItemMeta> function) {
final ItemMeta meta = item.getItemMeta();
function.accept(meta);
item.setItemMeta(meta);
}

public StackBuilder type(final String type) {
this.type = type;
return this;
}

public StackBuilder amount(final int amount) {
item.setAmount(amount);
return this;
Expand All @@ -66,6 +80,7 @@ public StackBuilder name(final String name) {
}

public StackBuilder lore(final String lore) {
if (lore == null || lore.isEmpty()) return this;
return lore(lore.split("\n"));
}

Expand Down
Loading

0 comments on commit c33b380

Please sign in to comment.