make tui and cui for size changing

This commit is contained in:
zhangyuheng 2025-01-31 23:57:43 +08:00
parent 1befb9e268
commit c33bc9b52a
7 changed files with 276 additions and 17 deletions

View File

@ -11,7 +11,7 @@ var libraries = listOf<String>()
libraries = libraries + "cn.lunadeer:MinecraftPluginUtils:2.0.7"
group = "cn.lunadeer"
version = "3.4.1-alpha.3"
version = "3.5.0-alpha.2"
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(17))

View File

@ -15,6 +15,7 @@ import cn.lunadeer.dominion.uis.tuis.dominion.DominionList;
import cn.lunadeer.dominion.uis.tuis.dominion.DominionManage;
import cn.lunadeer.dominion.uis.tuis.dominion.manage.EnvSetting;
import cn.lunadeer.dominion.uis.tuis.dominion.manage.GuestSetting;
import cn.lunadeer.dominion.uis.tuis.dominion.manage.Resize;
import cn.lunadeer.dominion.uis.tuis.dominion.manage.SizeInfo;
import cn.lunadeer.dominion.utils.TuiUtils;
import org.bukkit.command.Command;
@ -63,6 +64,9 @@ public class Commands implements TabExecutor {
case "info":
SizeInfo.show(sender, args);
break;
case "resize":
Resize.show(sender, args);
break;
case "manage":
DominionManage.show(sender, args);
break;
@ -191,6 +195,9 @@ public class Commands implements TabExecutor {
case "cui_rename_group":
RenameGroup.open(sender, args);
break;
case "cui_resize_dominion":
ResizeDominion.open(sender, args);
break;
default:
return false;
}

View File

@ -1,6 +1,5 @@
package cn.lunadeer.dominion.dtos;
import cn.lunadeer.dominion.api.dtos.flag.Flag;
import cn.lunadeer.dominion.api.dtos.flag.Flags;
import cn.lunadeer.dominion.api.dtos.flag.PreFlag;
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;

View File

@ -809,6 +809,27 @@ public class Translation extends Localization {
@i18nField(defaultValue = "来自领地:")
public static i18n TUI_TitleList_FromDominion;
@i18nField(defaultValue = "修改尺寸")
public static i18n TUI_ResizeButton;
@i18nField(defaultValue = "修改领地 %s 的尺寸")
public static i18n TUI_ResizeDominion;
@i18nField(defaultValue = "北(Y-)")
public static i18n TUI_ResizeDominion_North;
@i18nField(defaultValue = "东(X+)")
public static i18n TUI_ResizeDominion_East;
@i18nField(defaultValue = "南(Y+)")
public static i18n TUI_ResizeDominion_South;
@i18nField(defaultValue = "西(X-)")
public static i18n TUI_ResizeDominion_West;
@i18nField(defaultValue = "上(Z+)")
public static i18n TUI_ResizeDominion_Up;
@i18nField(defaultValue = "下(Z-)")
public static i18n TUI_ResizeDominion_Down;
@i18nField(defaultValue = "扩大")
public static i18n TUI_ResizeDominion_Expand;
@i18nField(defaultValue = "缩小")
public static i18n TUI_ResizeDominion_Contract;
@i18nField(defaultValue = "输入要创建的领地名称")
public static i18n CUI_Input_CreateDominion;
@i18nField(defaultValue = "输入要创建的权限组名称")
@ -827,6 +848,8 @@ public class Translation extends Localization {
public static i18n CUI_Input_RenameGroup;
@i18nField(defaultValue = "输入卫星地图地块颜色16进制")
public static i18n CUI_Input_SetMapColor;
@i18nField(defaultValue = "%s 领地 %s 的边界 方向:%s")
public static i18n CUI_Input_ResizeDominion;
@i18nField(defaultValue = "AutoCreateRadius 不能等于 0已重置为 10")
public static i18n Config_Check_AutoCreateRadiusError;

View File

@ -0,0 +1,110 @@
package cn.lunadeer.dominion.uis.cuis;
import cn.lunadeer.dominion.DominionInterface;
import cn.lunadeer.dominion.api.dtos.DominionDTO;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.events.dominion.modify.DominionSizeChangeEvent;
import cn.lunadeer.dominion.managers.Translation;
import cn.lunadeer.dominion.uis.tuis.dominion.manage.SizeInfo;
import cn.lunadeer.minecraftpluginutils.Notification;
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
import org.bukkit.block.BlockFace;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
public class ResizeDominion {
private static class resizeDominionCB implements CuiTextInput.InputCallback {
private final Player sender;
private final DominionDTO dominion;
private final DominionSizeChangeEvent.SizeChangeType type;
private final BlockFace direction;
public resizeDominionCB(Player sender,
DominionDTO dominion,
DominionSizeChangeEvent.SizeChangeType type,
BlockFace direction) {
this.sender = sender;
this.dominion = dominion;
this.type = type;
this.direction = direction;
}
@Override
public void handleData(String input) {
int size;
try {
size = Integer.parseInt(input);
if (size < 1) {
Notification.error(sender, Translation.Commands_Dominion_SizeShouldBePositive);
return;
}
} catch (NumberFormatException e) {
Notification.error(sender, Translation.Commands_Dominion_SizeShouldBeInteger);
return;
}
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
new DominionSizeChangeEvent(operator, dominion, type, direction, size).call();
SizeInfo.show(sender, dominion.getName());
}
}
/**
* Open the resize dominion CUI
*
* @param sender Command sender
* @param args Command arguments
* args[1] - Dominion name
* args[2] - Type of resize
* args[3] - Direction of resize
*/
public static void open(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
DominionDTO dominion = DominionInterface.instance.getDominion(args[1]);
if (dominion == null) {
Notification.error(sender, Translation.Messages_DominionNotExist, args[1]);
return;
}
DominionSizeChangeEvent.SizeChangeType type = DominionSizeChangeEvent.SizeChangeType.valueOf(args[2]);
String typeStr;
if (type == DominionSizeChangeEvent.SizeChangeType.EXPAND) {
typeStr = Translation.TUI_ResizeDominion_Expand.trans();
} else {
typeStr = Translation.TUI_ResizeDominion_Contract.trans();
}
BlockFace direction = BlockFace.valueOf(args[3]);
String directionStr;
switch (direction) {
case NORTH:
directionStr = Translation.TUI_ResizeDominion_North.trans();
break;
case EAST:
directionStr = Translation.TUI_ResizeDominion_East.trans();
break;
case SOUTH:
directionStr = Translation.TUI_ResizeDominion_South.trans();
break;
case WEST:
directionStr = Translation.TUI_ResizeDominion_West.trans();
break;
case UP:
directionStr = Translation.TUI_ResizeDominion_Up.trans();
break;
case DOWN:
directionStr = Translation.TUI_ResizeDominion_Down.trans();
break;
default:
Notification.error(sender, Translation.Messages_InvalidDirection);
return;
}
CuiTextInput.InputCallback resizeDominionCB = new resizeDominionCB(player, dominion, type, direction);
CuiTextInput view = CuiTextInput.create(resizeDominionCB).setText(String.valueOf(10)).title(
Translation.CUI_Input_ResizeDominion.trans().formatted(typeStr, direction.name(), directionStr)
);
view.open(player);
}
}

View File

@ -0,0 +1,109 @@
package cn.lunadeer.dominion.uis.tuis.dominion.manage;
import cn.lunadeer.dominion.api.dtos.DominionDTO;
import cn.lunadeer.dominion.events.dominion.modify.DominionSizeChangeEvent;
import cn.lunadeer.dominion.managers.Translation;
import cn.lunadeer.minecraftpluginutils.stui.ListView;
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
import org.bukkit.block.BlockFace;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
import static cn.lunadeer.dominion.utils.TuiUtils.getDominionNameArg_1;
public class Resize {
public static void show(CommandSender sender, String dominionName) {
show(sender, new String[]{"resize", dominionName});
}
/**
* Show the resize UI
*
* @param sender The sender
* @param args The arguments
* args[1] - Dominion name
*/
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
DominionDTO dominion = getDominionNameArg_1(player, args);
ListView view = ListView.create(10, "/dominion resize " + dominion.getName());
view.title(String.format(Translation.TUI_ResizeDominion.trans(), dominion.getName()));
view.navigator(Line.create()
.append(Button.create(Translation.TUI_Navigation_Manage).setExecuteCommand("/dominion manage " + dominion.getName()).build())
.append(Button.create(Translation.TUI_DominionManage_InfoButton).setExecuteCommand("/dominion info " + dominion.getName()).build())
.append(Translation.TUI_ResizeButton));
view.add(
Line.create()
.append(Translation.TUI_ResizeDominion_North)
.append(Button.create(Translation.TUI_ResizeDominion_Expand).setExecuteCommand(
getCommand(dominion.getName(), DominionSizeChangeEvent.SizeChangeType.EXPAND, BlockFace.NORTH)
).build())
.append(Button.create(Translation.TUI_ResizeDominion_Contract).setExecuteCommand(
getCommand(dominion.getName(), DominionSizeChangeEvent.SizeChangeType.CONTRACT, BlockFace.NORTH)
).build())
);
view.add(
Line.create()
.append(Translation.TUI_ResizeDominion_South)
.append(Button.create(Translation.TUI_ResizeDominion_Expand).setExecuteCommand(
getCommand(dominion.getName(), DominionSizeChangeEvent.SizeChangeType.EXPAND, BlockFace.SOUTH)
).build())
.append(Button.create(Translation.TUI_ResizeDominion_Contract).setExecuteCommand(
getCommand(dominion.getName(), DominionSizeChangeEvent.SizeChangeType.CONTRACT, BlockFace.SOUTH)
).build())
);
view.add(
Line.create()
.append(Translation.TUI_ResizeDominion_West)
.append(Button.create(Translation.TUI_ResizeDominion_Expand).setExecuteCommand(
getCommand(dominion.getName(), DominionSizeChangeEvent.SizeChangeType.EXPAND, BlockFace.WEST)
).build())
.append(Button.create(Translation.TUI_ResizeDominion_Contract).setExecuteCommand(
getCommand(dominion.getName(), DominionSizeChangeEvent.SizeChangeType.CONTRACT, BlockFace.WEST)
).build())
);
view.add(
Line.create()
.append(Translation.TUI_ResizeDominion_East)
.append(Button.create(Translation.TUI_ResizeDominion_Expand).setExecuteCommand(
getCommand(dominion.getName(), DominionSizeChangeEvent.SizeChangeType.EXPAND, BlockFace.EAST)
).build())
.append(Button.create(Translation.TUI_ResizeDominion_Contract).setExecuteCommand(
getCommand(dominion.getName(), DominionSizeChangeEvent.SizeChangeType.CONTRACT, BlockFace.EAST)
).build())
);
view.add(
Line.create()
.append(Translation.TUI_ResizeDominion_Up)
.append(Button.create(Translation.TUI_ResizeDominion_Expand).setExecuteCommand(
getCommand(dominion.getName(), DominionSizeChangeEvent.SizeChangeType.EXPAND, BlockFace.UP)
).build())
.append(Button.create(Translation.TUI_ResizeDominion_Contract).setExecuteCommand(
getCommand(dominion.getName(), DominionSizeChangeEvent.SizeChangeType.CONTRACT, BlockFace.UP)
).build())
);
view.add(
Line.create()
.append(Translation.TUI_ResizeDominion_Down)
.append(Button.create(Translation.TUI_ResizeDominion_Expand).setExecuteCommand(
getCommand(dominion.getName(), DominionSizeChangeEvent.SizeChangeType.EXPAND, BlockFace.DOWN)
).build())
.append(Button.create(Translation.TUI_ResizeDominion_Contract).setExecuteCommand(
getCommand(dominion.getName(), DominionSizeChangeEvent.SizeChangeType.CONTRACT, BlockFace.DOWN)
).build())
);
view.showOn(player, 1);
}
public static String getCommand(String dominionName, DominionSizeChangeEvent.SizeChangeType type, BlockFace direction) {
return "/dominion cui_resize_dominion " + dominionName + " " + type.name() + " " + direction.name();
}
}

View File

@ -1,21 +1,27 @@
package cn.lunadeer.dominion.uis.tuis.dominion.manage;
import cn.lunadeer.dominion.api.dtos.DominionDTO;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.PlayerController;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.managers.Translation;
import cn.lunadeer.dominion.utils.Particle;
import cn.lunadeer.minecraftpluginutils.Notification;
import cn.lunadeer.minecraftpluginutils.stui.View;
import cn.lunadeer.minecraftpluginutils.stui.ListView;
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
import static cn.lunadeer.dominion.utils.ControllerUtils.notOwner;
import static cn.lunadeer.dominion.utils.TuiUtils.getDominionNameArg_1;
public class SizeInfo {
public static void show(CommandSender sender, String dominionName) {
show(sender, new String[]{"info", dominionName});
}
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
@ -31,24 +37,29 @@ public class SizeInfo {
Integer x2 = dominion.getX2();
Integer y2 = dominion.getY2();
Integer z2 = dominion.getZ2();
View view = View.create();
view.title(String.format(Translation.TUI_SizeInfo_Title.trans(), dominion.getName()))
.subtitle(Translation.TUI_SizeInfo_Owner.trans() + owner.getLastKnownName())
.addLine(Line.create().append(Translation.TUI_SizeInfo_Size).append(dominion.getWidthX() + " x " + dominion.getHeight() + " x " + dominion.getWidthZ()))
.addLine(Line.create().append(Translation.TUI_SizeInfo_Center).append((x1 + (x2 - x1) / 2) + " " + (y1 + (y2 - y1) / 2) + " " + (z1 + (z2 - z1) / 2)))
.addLine(Line.create().append(Translation.TUI_SizeInfo_Vertical).append(String.valueOf(dominion.getHeight())))
.addLine(Line.create().append(Translation.TUI_SizeInfo_VertY).append(y1 + " ~ " + y2))
.addLine(Line.create().append(Translation.TUI_SizeInfo_Square).append(String.valueOf(dominion.getSquare())))
.addLine(Line.create().append(Translation.TUI_SizeInfo_Volume).append(String.valueOf(dominion.getVolume())))
.addLine(Line.create().append(Translation.TUI_SizeInfo_TpLocation).append(
ListView view = ListView.create(10, "/dominion info " + dominion.getName());
view.title(String.format(Translation.TUI_SizeInfo_Title.trans(), dominion.getName()));
if (notOwner(BukkitPlayerOperator.create(player), dominion)) {
view.subtitle(Translation.TUI_SizeInfo_Owner.trans() + owner.getLastKnownName());
} else {
view.subtitle(Line.create()
.append(Button.create(Translation.TUI_Navigation_Manage).setExecuteCommand("/dominion manage " + dominion.getName()).build())
.append(Button.create(Translation.TUI_ResizeButton).setExecuteCommand("/dominion resize " + dominion.getName()).build())
);
}
view.add(Line.create().append(Translation.TUI_SizeInfo_Size).append(dominion.getWidthX() + " x " + dominion.getHeight() + " x " + dominion.getWidthZ()))
.add(Line.create().append(Translation.TUI_SizeInfo_Center).append((x1 + (x2 - x1) / 2) + " " + (y1 + (y2 - y1) / 2) + " " + (z1 + (z2 - z1) / 2)))
.add(Line.create().append(Translation.TUI_SizeInfo_Vertical).append(String.valueOf(dominion.getHeight())))
.add(Line.create().append(Translation.TUI_SizeInfo_VertY).append(y1 + " ~ " + y2))
.add(Line.create().append(Translation.TUI_SizeInfo_Square).append(String.valueOf(dominion.getSquare())))
.add(Line.create().append(Translation.TUI_SizeInfo_Volume).append(String.valueOf(dominion.getVolume())))
.add(Line.create().append(Translation.TUI_SizeInfo_TpLocation).append(
dominion.getTpLocation() == null ?
Translation.TUI_SizeInfo_NoneTp.trans() :
dominion.getTpLocation().getX() + " " + dominion.getTpLocation().getY() + " " + dominion.getTpLocation().getZ()
))
.actionBar(Line.create()
.append(Button.create(Translation.TUI_Navigation_Manage).setExecuteCommand("/dominion manage " + dominion.getName()).build())
.append(Button.create(Translation.TUI_Navigation_GuestSetting).setExecuteCommand("/dominion guest_setting " + dominion.getName()).build()))
.showOn(player);
.showOn(player, 1);
Particle.showBorder(player, dominion);
}
}