rewrite ui
This commit is contained in:
parent
f38cac39ff
commit
7b41d0f591
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>cn.lunadeer</groupId>
|
<groupId>cn.lunadeer</groupId>
|
||||||
<artifactId>NewbTitle</artifactId>
|
<artifactId>NewbTitle</artifactId>
|
||||||
<version>0.34-alpha</version>
|
<version>0.36-alpha</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>NewbTitle</name>
|
<name>NewbTitle</name>
|
||||||
|
@ -2,6 +2,7 @@ package cn.lunadeer.newbtitle;
|
|||||||
|
|
||||||
import cn.lunadeer.newbtitle.utils.Database;
|
import cn.lunadeer.newbtitle.utils.Database;
|
||||||
import cn.lunadeer.newbtitle.utils.Notification;
|
import cn.lunadeer.newbtitle.utils.Notification;
|
||||||
|
import cn.lunadeer.newbtitle.utils.STUI.Button;
|
||||||
import cn.lunadeer.newbtitle.utils.STUI.Line;
|
import cn.lunadeer.newbtitle.utils.STUI.Line;
|
||||||
import cn.lunadeer.newbtitle.utils.STUI.View;
|
import cn.lunadeer.newbtitle.utils.STUI.View;
|
||||||
import cn.lunadeer.newbtitle.utils.XLogger;
|
import cn.lunadeer.newbtitle.utils.XLogger;
|
||||||
@ -26,18 +27,13 @@ public class Shop {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = (Player) sender;
|
Player player = (Player) sender;
|
||||||
Line header = Line.create();
|
|
||||||
header.set(Line.Slot.LEFT, "称号")
|
|
||||||
.set(Line.Slot.MIDDLE, "价格|天|剩余")
|
|
||||||
.set(Line.Slot.RIGHT, "操作");
|
|
||||||
int offset = (page - 1) * 4;
|
int offset = (page - 1) * 4;
|
||||||
if (offset >= titles.size() || offset < 0) {
|
if (offset >= titles.size() || offset < 0) {
|
||||||
Notification.error(player, "页数超出范围");
|
Notification.error(player, "页数超出范围");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
View view = View.create();
|
View view = View.create();
|
||||||
view.title("|| 称号商店 ||")
|
view.title("称号商店");
|
||||||
.set(View.Slot.SUBTITLE, header);
|
|
||||||
for (int i = offset; i < offset + 4; i++) {
|
for (int i = offset; i < offset + 4; i++) {
|
||||||
if (i >= titles.size()) {
|
if (i >= titles.size()) {
|
||||||
break;
|
break;
|
||||||
@ -46,23 +42,16 @@ public class Shop {
|
|||||||
TextComponent idx = Component.text("[" + title_sale_id + "] ");
|
TextComponent idx = Component.text("[" + title_sale_id + "] ");
|
||||||
SaleTitle title = titles.get(title_sale_id);
|
SaleTitle title = titles.get(title_sale_id);
|
||||||
Line line = Line.create();
|
Line line = Line.create();
|
||||||
TextComponent buy_button = Component.text("购买")
|
Component button = Button.create("购买", "/nt buy " + title_sale_id);
|
||||||
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/nt buy " + title_sale_id));
|
line.append(idx)
|
||||||
line.set(Line.Slot.LEFT, idx.append(title.getTitle()))
|
.append(title.getTitle())
|
||||||
.set(Line.Slot.MIDDLE, title.getPrice() + "|" +
|
.append("价格:" + title.getPrice() + " 有效期:" + title.getDays() + "天")
|
||||||
(title.getDays() < 0 ? "∞" : title.getDays()) + "|" +
|
.append("售卖截止:" + title.getSaleEndAt())
|
||||||
(title.getAmount() < 0 ? "∞" : title.getAmount()))
|
.append("剩余:" + ((title.getAmount() == -1) ? "无限" : title.getAmount()))
|
||||||
.set(Line.Slot.RIGHT, buy_button);
|
.append(button);
|
||||||
view.set(i, line);
|
view.set(i, line);
|
||||||
}
|
}
|
||||||
Line action_bar = Line.create();
|
view.set(View.Slot.ACTIONBAR, View.pagination(page, titles.size(), "/nt shop"));
|
||||||
TextComponent previous_button = Component.text("上一页")
|
|
||||||
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/nt shop " + (page - 1)));
|
|
||||||
TextComponent next_button = Component.text("下一页")
|
|
||||||
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/nt shop " + (page + 1)));
|
|
||||||
action_bar.set(Line.Slot.MIDDLE, previous_button)
|
|
||||||
.set(Line.Slot.RIGHT, next_button);
|
|
||||||
view.set(View.Slot.ACTIONBAR, action_bar);
|
|
||||||
view.showOn(player);
|
view.showOn(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,35 +68,23 @@ public class Title {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = (Player) sender;
|
Player player = (Player) sender;
|
||||||
Line header = Line.create();
|
|
||||||
header.set(Line.Slot.LEFT, "ID")
|
|
||||||
.set(Line.Slot.MIDDLE, "称号");
|
|
||||||
int offset = (page - 1) * 4;
|
int offset = (page - 1) * 4;
|
||||||
if (offset >= titles.size() || offset < 0) {
|
if (offset >= titles.size() || offset < 0) {
|
||||||
Notification.error(player, "页数超出范围");
|
Notification.error(player, "页数超出范围");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
View view = View.create();
|
View view = View.create();
|
||||||
view.title("|| 所有称号 ||")
|
view.title("所有称号");
|
||||||
.set(View.Slot.SUBTITLE, header);
|
|
||||||
for (int i = offset; i < offset + 4; i++) {
|
for (int i = offset; i < offset + 4; i++) {
|
||||||
if (i >= titles.size()) {
|
if (i >= titles.size()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
TextComponent idx = Component.text("[" + titles.get(i).getId() + "] ");
|
TextComponent idx = Component.text("[" + titles.get(i).getId() + "] ");
|
||||||
Line line = Line.create();
|
Line line = Line.create();
|
||||||
line.set(Line.Slot.LEFT, idx)
|
line.append(idx).append(titles.get(i).getTitle());
|
||||||
.set(Line.Slot.MIDDLE, (TextComponent) titles.get(i).getTitle());
|
|
||||||
view.set(i, line);
|
view.set(i, line);
|
||||||
}
|
}
|
||||||
Line action_bar = Line.create();
|
view.set(View.Slot.ACTIONBAR, View.pagination(page, titles.size(), "/nt listall"));
|
||||||
TextComponent previous_button = Component.text("上一页")
|
|
||||||
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/nt all " + (page - 1)));
|
|
||||||
TextComponent next_button = Component.text("下一页")
|
|
||||||
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/nt all " + (page + 1)));
|
|
||||||
action_bar.set(Line.Slot.MIDDLE, previous_button)
|
|
||||||
.set(Line.Slot.RIGHT, next_button);
|
|
||||||
view.set(View.Slot.ACTIONBAR, action_bar);
|
|
||||||
view.showOn(player);
|
view.showOn(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,7 +158,11 @@ public class Title {
|
|||||||
components.add(Component.text(content, color.getStyle()));
|
components.add(Component.text(content, color.getStyle()));
|
||||||
}
|
}
|
||||||
components.add(suffix);
|
components.add(suffix);
|
||||||
return Component.join(join, components).hoverEvent(HoverEvent.hoverEvent(HoverEvent.Action.SHOW_TEXT, Component.text(this._description)));
|
TextComponent.Builder title_component = Component.text();
|
||||||
|
for (TextComponent component : components) {
|
||||||
|
title_component.append(component);
|
||||||
|
}
|
||||||
|
return title_component.build().hoverEvent(HoverEvent.hoverEvent(HoverEvent.Action.SHOW_TEXT, Component.text(this._description)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTitle(String title) {
|
public void setTitle(String title) {
|
||||||
|
@ -2,6 +2,7 @@ package cn.lunadeer.newbtitle;
|
|||||||
|
|
||||||
import cn.lunadeer.newbtitle.utils.Database;
|
import cn.lunadeer.newbtitle.utils.Database;
|
||||||
import cn.lunadeer.newbtitle.utils.Notification;
|
import cn.lunadeer.newbtitle.utils.Notification;
|
||||||
|
import cn.lunadeer.newbtitle.utils.STUI.Button;
|
||||||
import cn.lunadeer.newbtitle.utils.STUI.Line;
|
import cn.lunadeer.newbtitle.utils.STUI.Line;
|
||||||
import cn.lunadeer.newbtitle.utils.STUI.View;
|
import cn.lunadeer.newbtitle.utils.STUI.View;
|
||||||
import cn.lunadeer.newbtitle.utils.XLogger;
|
import cn.lunadeer.newbtitle.utils.XLogger;
|
||||||
@ -38,11 +39,6 @@ public class XPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void openBackpack(Integer page) {
|
public void openBackpack(Integer page) {
|
||||||
Line header = Line.create();
|
|
||||||
header.set(Line.Slot.LEFT, "称号")
|
|
||||||
.set(Line.Slot.MIDDLE, "到期时间")
|
|
||||||
.set(Line.Slot.RIGHT, "操作");
|
|
||||||
|
|
||||||
Map<Integer, PlayerTitle> titles = getTitles(_player.getUniqueId());
|
Map<Integer, PlayerTitle> titles = getTitles(_player.getUniqueId());
|
||||||
int offset = (page - 1) * 4;
|
int offset = (page - 1) * 4;
|
||||||
if (offset >= titles.size() || offset < 0) {
|
if (offset >= titles.size() || offset < 0) {
|
||||||
@ -50,8 +46,7 @@ public class XPlayer {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
View view = View.create();
|
View view = View.create();
|
||||||
view.title("|| 我的称号 ||")
|
view.title("我的称号");
|
||||||
.set(View.Slot.SUBTITLE, header);
|
|
||||||
for (int i = offset; i < offset + 4; i++) {
|
for (int i = offset; i < offset + 4; i++) {
|
||||||
if (i >= titles.size()) {
|
if (i >= titles.size()) {
|
||||||
break;
|
break;
|
||||||
@ -61,21 +56,14 @@ public class XPlayer {
|
|||||||
PlayerTitle title = titles.get(title_id);
|
PlayerTitle title = titles.get(title_id);
|
||||||
Line line = Line.create();
|
Line line = Line.create();
|
||||||
boolean is_using = Objects.equals(title.getId(), _current_title_id);
|
boolean is_using = Objects.equals(title.getId(), _current_title_id);
|
||||||
TextComponent buy_button = Component.text(is_using ? "卸下" : "使用")
|
Component button = Button.create(is_using ? "卸下" : "使用", "/nt use " + (is_using ? -1 : title.getId()));
|
||||||
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/nt use " + (is_using ? -1 : title.getId())));
|
line.append(idx)
|
||||||
line.set(Line.Slot.LEFT, idx.append(title.getTitle()))
|
.append(title.getTitle())
|
||||||
.set(Line.Slot.MIDDLE, title.getExpireAt())
|
.append(Component.text("有效期至:" + title.getExpireAt()))
|
||||||
.set(Line.Slot.RIGHT, buy_button);
|
.append(button);
|
||||||
view.set(i, line);
|
view.set(i, line);
|
||||||
}
|
}
|
||||||
Line action_bar = Line.create();
|
view.set(View.Slot.ACTIONBAR, View.pagination(page, titles.size(), "/nt list"));
|
||||||
TextComponent previous_button = Component.text("上一页")
|
|
||||||
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/nt list " + (page - 1)));
|
|
||||||
TextComponent next_button = Component.text("下一页")
|
|
||||||
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/nt list " + (page + 1)));
|
|
||||||
action_bar.set(Line.Slot.MIDDLE, previous_button)
|
|
||||||
.set(Line.Slot.RIGHT, next_button);
|
|
||||||
view.set(View.Slot.ACTIONBAR, action_bar);
|
|
||||||
view.showOn(_player);
|
view.showOn(_player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
src/main/java/cn/lunadeer/newbtitle/utils/STUI/Button.java
Normal file
11
src/main/java/cn/lunadeer/newbtitle/utils/STUI/Button.java
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package cn.lunadeer.newbtitle.utils.STUI;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
|
||||||
|
public class Button {
|
||||||
|
|
||||||
|
public static Component create(String text, String command) {
|
||||||
|
return Component.text("[" + text + "]", View.action_color)
|
||||||
|
.clickEvent(net.kyori.adventure.text.event.ClickEvent.clickEvent(net.kyori.adventure.text.event.ClickEvent.Action.RUN_COMMAND, command));
|
||||||
|
}
|
||||||
|
}
|
@ -3,64 +3,45 @@ package cn.lunadeer.newbtitle.utils.STUI;
|
|||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
public class Line {
|
public class Line {
|
||||||
public enum Slot {
|
private List<Component> elements = new ArrayList<>();
|
||||||
LEFT,
|
|
||||||
MIDDLE,
|
|
||||||
RIGHT
|
|
||||||
}
|
|
||||||
private TextComponent left_elements;
|
|
||||||
private TextComponent middle_elements;
|
|
||||||
private TextComponent right_elements;
|
|
||||||
|
|
||||||
|
private TextComponent divider = Component.text(" - ", View.sub_color);
|
||||||
|
|
||||||
public Line() {
|
public Line() {
|
||||||
this.left_elements = Component.text(" ");
|
|
||||||
this.middle_elements = Component.text(" ");
|
|
||||||
this.right_elements = Component.text(" ");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public TextComponent build() {
|
public TextComponent build() {
|
||||||
TextComponent gap = Component.text(" ");
|
TextComponent.Builder builder = Component.text();
|
||||||
return Component.text().append(left_elements)
|
for (int i = 0; i < elements.size(); i++) {
|
||||||
.append(gap)
|
builder.append(elements.get(i));
|
||||||
.append(middle_elements)
|
if (i != elements.size() - 1) {
|
||||||
.append(gap)
|
builder.append(divider);
|
||||||
.append(right_elements).build();
|
}
|
||||||
|
}
|
||||||
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Line create() {
|
public static Line create() {
|
||||||
return new Line();
|
return new Line();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Line set(Slot slot, TextComponent component) {
|
public Line append(TextComponent component) {
|
||||||
switch (slot) {
|
elements.add(component);
|
||||||
case LEFT:
|
|
||||||
this.left_elements = component;
|
|
||||||
break;
|
|
||||||
case MIDDLE:
|
|
||||||
this.middle_elements = component;
|
|
||||||
break;
|
|
||||||
case RIGHT:
|
|
||||||
this.right_elements = component;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Line set(Slot slot, String component) {
|
public Line append(Component component) {
|
||||||
switch (slot) {
|
elements.add(component);
|
||||||
case LEFT:
|
return this;
|
||||||
this.left_elements = Component.text(component);
|
|
||||||
break;
|
|
||||||
case MIDDLE:
|
|
||||||
this.middle_elements = Component.text(component);
|
|
||||||
break;
|
|
||||||
case RIGHT:
|
|
||||||
this.right_elements = Component.text(component);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Line append(String component) {
|
||||||
|
elements.add(Component.text(component));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,8 +2,13 @@ package cn.lunadeer.newbtitle.utils.STUI;
|
|||||||
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
|
import net.kyori.adventure.text.event.ClickEvent;
|
||||||
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class View {
|
public class View {
|
||||||
public enum Slot {
|
public enum Slot {
|
||||||
SUBTITLE,
|
SUBTITLE,
|
||||||
@ -14,6 +19,14 @@ public class View {
|
|||||||
ACTIONBAR
|
ACTIONBAR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static TextColor main_color = TextColor.color(0, 179, 255);
|
||||||
|
public static TextColor sub_color = TextColor.color(143, 143, 143);
|
||||||
|
public static TextColor action_color = TextColor.color(251, 255, 139);
|
||||||
|
|
||||||
|
protected TextComponent title_decorate = Component.text("===========", main_color);
|
||||||
|
protected TextComponent sub_title_decorate = Component.text("=====", main_color);
|
||||||
|
protected TextComponent line_decorate = Component.text("- ", main_color);
|
||||||
|
protected TextComponent action_decorate = Component.text("> ", main_color);
|
||||||
protected TextComponent title = Component.text(" ");
|
protected TextComponent title = Component.text(" ");
|
||||||
protected TextComponent subtitle = Component.text(" ");
|
protected TextComponent subtitle = Component.text(" ");
|
||||||
protected TextComponent content_line1 = Component.text(" ");
|
protected TextComponent content_line1 = Component.text(" ");
|
||||||
@ -21,15 +34,43 @@ public class View {
|
|||||||
protected TextComponent content_line3 = Component.text(" ");
|
protected TextComponent content_line3 = Component.text(" ");
|
||||||
protected TextComponent content_line4 = Component.text(" ");
|
protected TextComponent content_line4 = Component.text(" ");
|
||||||
protected TextComponent actionbar = Component.text(" ");
|
protected TextComponent actionbar = Component.text(" ");
|
||||||
|
protected TextComponent bottom_decorate = Component.text("=================================", main_color);
|
||||||
|
|
||||||
|
public static TextComponent pagination(int page, int item_size, String command) {
|
||||||
|
// 第 x/y 页 [上一页] [下一页]
|
||||||
|
int page_size = 4;
|
||||||
|
int page_count = (int) Math.ceil((double) item_size / page_size);
|
||||||
|
if (page_count == 0) {
|
||||||
|
page_count = 1;
|
||||||
|
}
|
||||||
|
List<Component> componentList = new ArrayList<>();
|
||||||
|
componentList.add(Component.text("第 ", main_color));
|
||||||
|
componentList.add(Component.text(page, sub_color));
|
||||||
|
componentList.add(Component.text("/", main_color));
|
||||||
|
componentList.add(Component.text(page_count, sub_color));
|
||||||
|
componentList.add(Component.text(" 页 ", main_color));
|
||||||
|
if (page > 1) {
|
||||||
|
componentList.add(Button.create("[上一页]", command + " " + (page - 1)));
|
||||||
|
}
|
||||||
|
if (page < page_count) {
|
||||||
|
componentList.add(Button.create("[下一页]", command + " " + (page + 1)));
|
||||||
|
}
|
||||||
|
TextComponent.Builder builder = Component.text();
|
||||||
|
for (Component component : componentList) {
|
||||||
|
builder.append(component);
|
||||||
|
}
|
||||||
|
return builder.build();
|
||||||
|
}
|
||||||
|
|
||||||
public void showOn(Player player) {
|
public void showOn(Player player) {
|
||||||
player.sendMessage(title);
|
player.sendMessage(Component.text().append(title_decorate).append(title).append(title_decorate).build());
|
||||||
player.sendMessage(subtitle);
|
player.sendMessage(Component.text().append(sub_title_decorate).append(subtitle).build());
|
||||||
player.sendMessage(content_line1);
|
player.sendMessage(Component.text().append(line_decorate).append(content_line1).build());
|
||||||
player.sendMessage(content_line2);
|
player.sendMessage(Component.text().append(line_decorate).append(content_line2).build());
|
||||||
player.sendMessage(content_line3);
|
player.sendMessage(Component.text().append(line_decorate).append(content_line3).build());
|
||||||
player.sendMessage(content_line4);
|
player.sendMessage(Component.text().append(line_decorate).append(content_line4).build());
|
||||||
player.sendMessage(actionbar);
|
player.sendMessage(Component.text().append(action_decorate).append(actionbar).build());
|
||||||
|
player.sendMessage(bottom_decorate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static View create() {
|
public static View create() {
|
||||||
|
Loading…
Reference in New Issue
Block a user