work fine now
All checks were successful
Java CI-CD with Maven / build (push) Successful in 30m27s

This commit is contained in:
zhangyuheng 2024-01-09 17:42:16 +08:00
parent 08ea2c9a5a
commit 874d90d2be
9 changed files with 87 additions and 54 deletions

View File

@ -6,7 +6,7 @@
<groupId>cn.lunadeer</groupId>
<artifactId>MiniPlayerTitle</artifactId>
<version>1.2-beta</version>
<version>1.12-beta</version>
<packaging>jar</packaging>
<name>MiniPlayerTitle</name>

View File

@ -2,7 +2,12 @@ package cn.lunadeer.miniplayertitle;
import cn.lunadeer.miniplayertitle.commands.AdminCommands;
import cn.lunadeer.miniplayertitle.utils.Notification;
import cn.lunadeer.miniplayertitle.utils.STUI.Button;
import cn.lunadeer.miniplayertitle.utils.STUI.Line;
import cn.lunadeer.miniplayertitle.utils.STUI.View;
import cn.lunadeer.miniplayertitle.utils.XLogger;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
@ -35,7 +40,7 @@ public class Commands implements TabExecutor {
switch (label) {
case "mplt":
if (args.length == 0) {
printHelp(sender);
home_view(sender);
return true;
}
switch (args[0]) {
@ -89,6 +94,21 @@ public class Commands implements TabExecutor {
}
}
private void home_view(CommandSender sender){
if (!(sender instanceof Player)){
printHelp(sender);
return;
}
View view = View.create();
view.title("称号系统");
Component backpack = Button.create("称号背包", "/mplt list");
Component shop = Button.create("称号商店", "/mplt shop");
Line line = Line.create();
line.append(backpack).append(shop);
view.set(View.Slot.ACTIONBAR, line);
view.showOn((Player) sender);
}
/**
* Requests a list of possible completions for a command argument.
*
@ -146,7 +166,7 @@ public class Commands implements TabExecutor {
case "setamount":
return Collections.singletonList("<商品ID> <数量> (-1为无限)");
case "setendat":
return Collections.singletonList("<商品ID> <结束时间>(-1为永久)");
return Collections.singletonList("<商品ID> <结束时间YYYYMMDD>(-1为永久)");
default:
return Arrays.asList("use", "list", "shop", "buy");
}

View File

@ -1,6 +1,7 @@
package cn.lunadeer.miniplayertitle;
import cn.lunadeer.miniplayertitle.utils.Database;
import cn.lunadeer.miniplayertitle.utils.Time;
import java.sql.ResultSet;
import java.util.UUID;
@ -30,29 +31,25 @@ public class PlayerTitle extends Title {
return null;
}
public String getExpireAt() {
public String getExpireAtStr() {
if (this._expire_at == -1L) {
return "永久";
} else if (this._expire_at < System.currentTimeMillis()) {
} else if (this._expire_at < Time.getCurrent()) {
return "已过期";
} else {
return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date(this._expire_at));
return this._expire_at.toString();
}
}
public Long getExpireAtTimestamp() {
return this._expire_at;
}
public Boolean isExpired() {
if (this._expire_at == -1L) {
return false;
} else {
return this._expire_at < System.currentTimeMillis();
return this._expire_at < Time.getCurrent();
}
}
public void setExpireAtTimestamp(Long expire_at) {
public void setExpireAt(Long expire_at) {
this._expire_at = expire_at;
this.save();
}
@ -62,7 +59,7 @@ public class PlayerTitle extends Title {
sql += "UPDATE mplt_player_title ";
sql += "SET expire_at = " + this._expire_at + ", ";
sql += "updated_at = CURRENT_TIMESTAMP ";
sql += "WHERE player_uuid = '" + _player_uuid.toString() + "', ";
sql += "WHERE player_uuid = '" + _player_uuid.toString() + "' ";
sql += "AND title_id = " + this._id + ";";
Database.query(sql);
}

View File

@ -2,6 +2,7 @@ package cn.lunadeer.miniplayertitle;
import cn.lunadeer.miniplayertitle.utils.Database;
import cn.lunadeer.miniplayertitle.utils.Time;
import cn.lunadeer.miniplayertitle.utils.XLogger;
import java.sql.ResultSet;
@ -31,7 +32,7 @@ public class SaleTitle extends Title {
try (ResultSet rs = Database.query(sql)) {
if (rs != null && rs.next()) {
Integer id = rs.getInt("id");
return new SaleTitle(id, title_id, 0, 0, -1, System.currentTimeMillis());
return new SaleTitle(id, title_id, 0, 0, 0, -1L);
}
} catch (Exception e) {
XLogger.err("SaleTitle create failed: " + e.getMessage());
@ -84,10 +85,10 @@ public class SaleTitle extends Title {
public String getSaleEndAt() {
if (this._sale_end_at == -1L) {
return "常驻";
} else if (this._sale_end_at < System.currentTimeMillis()) {
} else if (this._sale_end_at < Time.getCurrent()) {
return "已停售";
} else {
return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date(this._sale_end_at));
return this._sale_end_at.toString();
}
}
@ -105,7 +106,7 @@ public class SaleTitle extends Title {
if (this._sale_end_at == -1L) {
return false;
} else {
return this._sale_end_at < System.currentTimeMillis();
return this._sale_end_at < Time.getCurrent();
}
}

View File

@ -5,6 +5,7 @@ import cn.lunadeer.miniplayertitle.utils.Notification;
import cn.lunadeer.miniplayertitle.utils.STUI.Button;
import cn.lunadeer.miniplayertitle.utils.STUI.Line;
import cn.lunadeer.miniplayertitle.utils.STUI.View;
import cn.lunadeer.miniplayertitle.utils.Time;
import cn.lunadeer.miniplayertitle.utils.XLogger;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
@ -58,7 +59,7 @@ public class XPlayer {
Component button = Button.create(is_using ? "卸下" : "使用", "/mplt use " + (is_using ? -1 : title.getId()));
line.append(idx)
.append(title.getTitle())
.append(Component.text("有效期至:" + title.getExpireAt()))
.append(Component.text("有效期至:" + title.getExpireAtStr()))
.append(button);
view.set(i, line);
}
@ -69,15 +70,16 @@ public class XPlayer {
public void updateUsingTitle(Integer title_id) {
_current_title_id = title_id;
checkTitleValid();
if (_current_title_id == -1) {
return;
}
String sql = "";
sql += "UPDATE mplt_player_using_title ";
sql += "SET title_id = " + _current_title_id + ", ";
sql += "updated_at = CURRENT_TIMESTAMP ";
sql += "WHERE uuid = '" + _player.getUniqueId().toString() + "';";
Database.query(sql);
if (_current_title_id == -1) {
Notification.info(_player, "成功卸下称号");
return;
}
Notification.info(_player, "成功使用称号: ");
Notification.info(_player, _titles.get(_current_title_id).getTitle());
}
@ -201,30 +203,35 @@ public class XPlayer {
Notification.error(_player, "你的余额不足");
return;
}
if (!_titles.containsKey(title.getId())) {
_titles.put(title.getId(), PlayerTitle.create(title.getId(), _player.getUniqueId()));
} else if (_titles.get(title.getId()).getExpireAtTimestamp() == -1) {
Notification.warn(_player, "你已经拥有此称号");
PlayerTitle title_bought = null;
if (_titles.containsKey(title.getId())) {
if (!_titles.get(title.getId()).isExpired()) {
Notification.warn(_player, "你已经拥有此称号");
return;
}
title_bought = _titles.get(title.getId());
} else {
title_bought = PlayerTitle.create(title.getId(), _player.getUniqueId());
}
if (title_bought == null) {
Notification.error(_player, "购买失败");
return;
}
PlayerTitle title_bought = _titles.get(title.getId());
set_coin(_coin - title.getPrice());
SaleTitle.setAmount(title.getId(), title.getAmount() - 1);
Notification.info(_player, "成功购买称号: ");
Notification.info(_player, title.getTitle());
if (title.getDays() == -1) {
title_bought.setExpireAtTimestamp(-1L);
title_bought.setExpireAt(-1L);
Notification.info(_player, "称号已购买至永久");
return;
}
if (title_bought.isExpired()) {
title_bought.setExpireAtTimestamp(System.currentTimeMillis() + title.getDays() * 24 * 60 * 60 * 1000L);
Notification.info(_player, title.getTitle());
Notification.info(_player, "称号已激活,有效期至 " + title_bought.getExpireAt());
} else {
title_bought.setExpireAtTimestamp(title_bought.getExpireAtTimestamp() + title.getDays() * 24 * 60 * 60 * 1000L);
Notification.info(_player, title.getTitle());
Notification.info(_player, "称号已续期至 " + title_bought.getExpireAt());
}
Long timestamp = System.currentTimeMillis() + title.getDays() * 24 * 60 * 60 * 1000L;
title_bought.setExpireAt((long) Time.getFromTimestamp(timestamp));
Notification.info(_player, title.getTitle());
Notification.info(_player, "称号已购买至 " + title_bought.getExpireAtStr());
}
public void setTitle(Integer title_id, Long expire_at) {
@ -232,8 +239,8 @@ public class XPlayer {
_titles.put(title_id, PlayerTitle.create(title_id, _player.getUniqueId()));
}
PlayerTitle title = _titles.get(title_id);
title.setExpireAtTimestamp(expire_at);
title.setExpireAt(expire_at);
Notification.info(_player, title.getTitle());
Notification.info(_player, "获得称号,有效期至 " + title.getExpireAt());
Notification.info(_player, "获得称号,有效期至 " + title.getExpireAtStr());
}
}

View File

@ -179,19 +179,13 @@ public class AdminCommands {
return true;
}
long time_stamp;
if (Integer.parseInt(args[2]) == -1) {
time_stamp = -1;
} else {
// 字符串转时间戳
java.text.SimpleDateFormat simpleDateFormat = new java.text.SimpleDateFormat("yyyyMMdd");
try {
java.util.Date date = simpleDateFormat.parse(args[2]);
time_stamp = date.getTime();
} catch (Exception e) {
Notification.error(sender, "时间格式错误");
return true;
}
try {
time_stamp = Long.parseLong(args[2]);
} catch (Exception e) {
Notification.error(sender, "时间格式错误");
return true;
}
SaleTitle.setSaleEndAt(Integer.parseInt(args[1]), time_stamp);
return true;
}

View File

@ -42,11 +42,11 @@ public class Notification {
}
public static void warn(Player player, Component msg) {
player.sendMessage(Component.text(prefix + msg, w_style).append(msg));
player.sendMessage(Component.text(prefix, w_style).append(msg));
}
public static void error(Player player, Component msg) {
player.sendMessage(Component.text(prefix + msg, e_style).append(msg));
player.sendMessage(Component.text(prefix, e_style).append(msg));
}
public static void info(CommandSender player, Component msg) {
@ -54,10 +54,10 @@ public class Notification {
}
public static void warn(CommandSender player, Component msg) {
player.sendMessage(Component.text(prefix + msg, w_style).append(msg));
player.sendMessage(Component.text(prefix, w_style).append(msg));
}
public static void error(CommandSender player, Component msg) {
player.sendMessage(Component.text(prefix + msg, e_style).append(msg));
player.sendMessage(Component.text(prefix, e_style).append(msg));
}
}

View File

@ -70,6 +70,7 @@ public class View {
player.sendMessage(Component.text().append(line_decorate).append(content_line4).build());
player.sendMessage(Component.text().append(action_decorate).append(actionbar).build());
player.sendMessage(bottom_decorate);
player.sendMessage(Component.text(" "));
}
public static View create() {

View File

@ -0,0 +1,13 @@
package cn.lunadeer.miniplayertitle.utils;
public class Time {
public static Integer getCurrent() {
// return YYYYMMDD
return Integer.parseInt(new java.text.SimpleDateFormat("yyyyMMdd").format(new java.util.Date()));
}
public static Integer getFromTimestamp(Long timestamp_ms) {
return Integer.parseInt(new java.text.SimpleDateFormat("yyyyMMdd").format(new java.util.Date(timestamp_ms)));
}
}