使用中間件攔截修改
此為 v0.1.5 之後的功能
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface HasPermission {
String value();
}public class PermissionMiddleWare implements MiddleWare<HasPermission> {
@Override
public void intercept(InterceptContext interceptContext, HasPermission hasPermission) throws Exception {
var permission = hasPermission.value();
var player = interceptContext.getPlayer();
if (!player.hasPermission(permission)) {
// 沒有權限時重導向至 NoPermissionView
player.sendMessage("you dont have permission!");
interceptContext.setRedirect(new BukkitView<>(NoPermissionView.class, permission));
}
// 否則繼續通過
}
@ViewDescriptor(
name = "沒有權限!",
rows = 1,
patterns = "ZZZZAZZZZ",
cancelMove = {'Z', 'A'}
)
public static class NoPermissionView implements View<String> {
@Override
public void renderView(String s, UIContext uiContext) {
uiContext.pattern('A').components(
uiContext.factory(ButtonFactory.class)
.icon(Material.IRON_AXE)
.title("&a你沒有以下權限: " + s)
.create()
);
}
}
}使用在 Controller 內所有 Mapping 方法
使用在特定的 Mapping 方法上
最后更新于