引入set命令,允许游戏内修改玩家沙雕值
This commit is contained in:
@@ -4,6 +4,8 @@ import ling.coordinateRecorder.Config;
|
||||
import ling.coordinateRecorder.CoordinateRecorder;
|
||||
import ling.coordinateRecorder.Listener.PlayerMap;
|
||||
import ling.coordinateRecorder.data.CheatItemsData;
|
||||
import ling.coordinateRecorder.data.Entity.TraverseEntity;
|
||||
import ling.coordinateRecorder.data.Entity.TraverseEnum;
|
||||
import ling.coordinateRecorder.data.PlayerData;
|
||||
import ling.coordinateRecorder.data.TransmitData;
|
||||
import ling.database.tables.records.LocationnotepadPO;
|
||||
@@ -16,7 +18,6 @@ import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.BookMeta;
|
||||
@@ -40,8 +41,8 @@ import static ling.database.tables.PlayersettingsTB.PLAYERSETTINGS;
|
||||
public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
|
||||
protected final static List<String> TAB_1 = Arrays.asList("add", "remove", "help", "reload", "list", "fixed",
|
||||
"unfixed", "unlock", "sb", "tp", "yes", "no", "setting"
|
||||
, "give");
|
||||
"unfixed", "unlock", "sb", "tp", "yes", "no", "setting",
|
||||
"give", "set");
|
||||
|
||||
public ZbCommand() {
|
||||
|
||||
@@ -163,36 +164,24 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
}
|
||||
|
||||
/// 查看玩家沙雕值
|
||||
protected void sb(Player player, String[] strings) {
|
||||
protected void sb(CommandSender command, String[] strings) {
|
||||
if (strings.length < 2) {
|
||||
player.sendMessage(ChatColor.RED + "需要 [目标]");
|
||||
command.sendMessage(ChatColor.RED + "需要 [目标]");
|
||||
return;
|
||||
}
|
||||
if (strings.length > 2) {
|
||||
player.sendMessage(ChatColor.RED + "命令过长");
|
||||
command.sendMessage(ChatColor.RED + "命令过长");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
List<Entity> list = Bukkit.selectEntities(player, strings[1]);
|
||||
if (list.isEmpty()) {
|
||||
player.sendMessage("没有选中任何玩家");
|
||||
return;
|
||||
}
|
||||
for (Entity entity : list) {
|
||||
if (entity instanceof Player target) {
|
||||
PlayerData data = PlayerMap.getCurrent().getPlayerData(target);
|
||||
if (data == null) {
|
||||
player.sendMessage(ChatColor.RED + "玩家 " + target.getName() + " 没有登录,跳过处理");
|
||||
continue;
|
||||
}
|
||||
player.sendMessage("玩家 " + target.getName() + " 拥有 " + data.getFraction() + " 沙雕值");
|
||||
} else {
|
||||
player.sendMessage(
|
||||
entity.getCustomName() != null ? entity.getCustomName() : entity.getName() + " 不是玩家");
|
||||
}
|
||||
}
|
||||
} catch (IllegalArgumentException e) {
|
||||
player.sendMessage(ChatColor.RED + "无法解析实体");
|
||||
|
||||
TraverseEnum isSuccess = TraverseEntity.traverseLoginPlayer(command, strings[1], data -> {
|
||||
command.sendMessage("玩家 " + data.getPlayer().getName() + " 拥有" + Config.getFractionTimeMessage(
|
||||
data.getFraction()) + "沙雕值");
|
||||
});
|
||||
if (isSuccess == TraverseEnum.EMPTY) {
|
||||
command.sendMessage("没有选中任何实体");
|
||||
} else if (isSuccess == TraverseEnum.ERROR) {
|
||||
command.sendMessage(ChatColor.RED + "无法解析实体");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -411,10 +400,8 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
return;
|
||||
}
|
||||
boolean isTp;
|
||||
if (strings[2].equals("true"))
|
||||
isTp = true;
|
||||
else if (strings[2].equals("false"))
|
||||
isTp = false;
|
||||
if (strings[2].equals("true")) isTp = true;
|
||||
else if (strings[2].equals("false")) isTp = false;
|
||||
else {
|
||||
player.sendMessage(ChatColor.RED + "语法错误,在" + strings[2] + "上");
|
||||
return;
|
||||
@@ -426,8 +413,7 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
try {
|
||||
var ctx = CoordinateRecorder.getDatabase().getDSL();
|
||||
UpdateSetMoreStep<PlayersettingsPO> update = ctx.update(PLAYERSETTINGS).set(PLAYERSETTINGS.TPME, isTp);
|
||||
if (message != null)
|
||||
update = update.set(PLAYERSETTINGS.SETTINGSREJECTTPMESSAGE, message);
|
||||
if (message != null) update = update.set(PLAYERSETTINGS.SETTINGSREJECTTPMESSAGE, message);
|
||||
update.where(PLAYERSETTINGS.UID.eq(player.getUniqueId().toString())).execute();
|
||||
data.loadPlayerSettings();
|
||||
player.sendMessage("设置已经成功更新!");
|
||||
@@ -478,8 +464,7 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
meta.addEnchant(Enchantment.VANISHING_CURSE, 1, true);
|
||||
meta.setDisplayName(ChatColor.YELLOW + "指令之剑");
|
||||
meta.setLore(Arrays.asList(ChatColor.YELLOW + "蕴含管理员权柄的命令武器",
|
||||
ChatColor.YELLOW + "由 " + player.getName() + " 召唤",
|
||||
ChatColor.RED + "仅限玩家!"));
|
||||
ChatColor.YELLOW + "由 " + player.getName() + " 召唤", ChatColor.RED + "仅限玩家!"));
|
||||
//设置修订次数,阻止玩家修复耐久,以及附加其他附魔
|
||||
((Repairable) meta).setRepairCost(100);
|
||||
meta.setDamage(sword.getType().getMaxDurability() - 3);
|
||||
@@ -497,6 +482,44 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
Bukkit.spigot().broadcast(message);
|
||||
}
|
||||
|
||||
protected void set(CommandSender command, String[] strings) {
|
||||
if (strings.length != 3) {
|
||||
command.sendMessage(ChatColor.RED + "命令过短");
|
||||
return;
|
||||
}
|
||||
if (!command.isOp()) {
|
||||
command.sendMessage(ChatColor.RED + "该命令需要管理员权限!");
|
||||
return;
|
||||
}
|
||||
int fraction = 0;
|
||||
try {
|
||||
fraction = Integer.parseInt(strings[2]);
|
||||
} catch (NumberFormatException e) {
|
||||
command.sendMessage(ChatColor.RED + "无法解析的参数:" + strings[2]);
|
||||
return;
|
||||
}
|
||||
|
||||
int finalFraction = fraction;
|
||||
TraverseEnum isSuccess = TraverseEntity.traverseLoginPlayer(command, strings[1], data -> {
|
||||
try {
|
||||
data.setFraction(finalFraction);
|
||||
PlayerMap.getCurrent().broadcastScore(data);
|
||||
command.sendMessage(data.getPlayer().getName() + " 沙雕值已更新");
|
||||
data.getPlayer().sendMessage(
|
||||
"沙雕值被管理员更新为 " + Config.getFractionTimeMessage(data.getFraction()));
|
||||
} catch (SQLException e) {
|
||||
command.sendMessage(ChatColor.RED + data.getPlayer().getName() + " 更新失败");
|
||||
}
|
||||
});
|
||||
if (isSuccess == TraverseEnum.SUCCESS) {
|
||||
command.sendMessage("命令已经成功执行");
|
||||
} else if (isSuccess == TraverseEnum.EMPTY) {
|
||||
command.sendMessage("没有选中任何实体");
|
||||
} else {
|
||||
command.sendMessage(ChatColor.RED + "更新失败:参数错误!");
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean execute(Player player, String[] strings) {
|
||||
if (strings.length < 1) {
|
||||
player.sendMessage(ChatColor.RED + "语法错误:需要 [选项]");
|
||||
@@ -528,9 +551,6 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
case "unlock":
|
||||
unlock(player, strings);
|
||||
break;
|
||||
case "sb":
|
||||
sb(player, strings);
|
||||
break;
|
||||
case "tp":
|
||||
tp(player, strings);
|
||||
break;
|
||||
@@ -559,6 +579,16 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s,
|
||||
@NotNull String[] strings) {
|
||||
assert s.equals("zb");
|
||||
if (strings.length >= 1) {
|
||||
switch (strings[0]) {
|
||||
case "set":
|
||||
set(commandSender, strings);
|
||||
return true;
|
||||
case "sb":
|
||||
sb(commandSender, strings);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (!(commandSender instanceof Player player)) {
|
||||
System.out.println("该命令只能由玩家执行");
|
||||
return false;
|
||||
@@ -629,6 +659,13 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
return List.of();
|
||||
}
|
||||
|
||||
protected List<String> onResetTab(Player player, String latest, String[] strings) {
|
||||
if (strings.length == 2) {
|
||||
return onSbTab(player, latest, strings);
|
||||
}
|
||||
return List.of("<沙雕值>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender commandSender, Command command, String s, String[] strings) {
|
||||
if (!(commandSender instanceof Player player)) {
|
||||
@@ -667,6 +704,9 @@ public class ZbCommand implements CommandExecutor, TabCompleter {
|
||||
if (strings[0].equals("setting")) {
|
||||
return onSettingTab(player, latest, strings);
|
||||
}
|
||||
if (strings[0].equals("set")) {
|
||||
return onResetTab(player, latest, strings);
|
||||
}
|
||||
return List.of();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
package ling.coordinateRecorder.data.Entity;
|
||||
|
||||
import ling.coordinateRecorder.Listener.PlayerMap;
|
||||
import ling.coordinateRecorder.data.PlayerData;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import net.md_5.bungee.api.chat.TranslatableComponent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/// 遍历实体
|
||||
public class TraverseEntity {
|
||||
public static TraverseEnum traverse(CommandSender command, String target, TraverseEntityInterface on) {
|
||||
try {
|
||||
List<Entity> list = Bukkit.selectEntities(command, target);
|
||||
if (list.isEmpty()) {
|
||||
return TraverseEnum.EMPTY;
|
||||
}
|
||||
for (Entity entity : list) {
|
||||
on.onEntity(entity);
|
||||
}
|
||||
} catch (IllegalArgumentException e) {
|
||||
return TraverseEnum.ERROR;
|
||||
}
|
||||
return TraverseEnum.SUCCESS;
|
||||
}
|
||||
|
||||
/// 遍历玩家
|
||||
public static TraverseEnum traversePlayer(CommandSender command, String target, TraversePlayerInterface on) {
|
||||
return traverse(command, target, (entity -> {
|
||||
if (entity instanceof Player player) {
|
||||
on.onPlayer(player);
|
||||
} else {
|
||||
BaseComponent message =
|
||||
new TranslatableComponent("item.minecraft." + entity.getType().name().toLowerCase());
|
||||
message.addExtra(" 不是玩家!");
|
||||
command.spigot().sendMessage(message);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
/// 遍历已登录玩家
|
||||
public static TraverseEnum traverseLoginPlayer(CommandSender command, String target, TraverseLoginPlayerInterface on) {
|
||||
return traversePlayer(command, target, player -> {
|
||||
PlayerData data = PlayerMap.getCurrent().getPlayerData(player);
|
||||
if (data == null) {
|
||||
command.sendMessage(player.getName() + " 没有登录");
|
||||
return;
|
||||
}
|
||||
on.onLoginPlayer(data);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package ling.coordinateRecorder.data.Entity;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
|
||||
public interface TraverseEntityInterface {
|
||||
void onEntity(Entity entity);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package ling.coordinateRecorder.data.Entity;
|
||||
|
||||
public enum TraverseEnum {
|
||||
SUCCESS,
|
||||
EMPTY,
|
||||
ERROR,
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package ling.coordinateRecorder.data.Entity;
|
||||
|
||||
import ling.coordinateRecorder.data.PlayerData;
|
||||
|
||||
public interface TraverseLoginPlayerInterface {
|
||||
void onLoginPlayer(PlayerData data);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package ling.coordinateRecorder.data.Entity;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public interface TraversePlayerInterface {
|
||||
void onPlayer(Player player);
|
||||
}
|
||||
@@ -276,6 +276,17 @@ public class PlayerData {
|
||||
return rows == 1;
|
||||
}
|
||||
|
||||
/// 设置玩家分数
|
||||
public boolean setFraction(int fraction) throws SQLException {
|
||||
if (fraction < 0)
|
||||
fraction = 0;
|
||||
var ctx = CoordinateRecorder.getDatabase().getDSL();
|
||||
int rows = ctx.update(PLAYERSETTINGS).set(PLAYERSETTINGS.FRACTION, Long.valueOf(fraction))
|
||||
.where(PLAYERSETTINGS.UID.eq(player.getUniqueId().toString())).execute();
|
||||
loadPlayerSettings();
|
||||
return rows == 1;
|
||||
}
|
||||
|
||||
/// 删除一个地标
|
||||
public boolean removeLocation(String name) throws SQLException {
|
||||
var ctx = CoordinateRecorder.getDatabase().getDSL();
|
||||
|
||||
Reference in New Issue
Block a user