Skip to content

Commit

Permalink
Implemented PlayerPermission
Browse files Browse the repository at this point in the history
  • Loading branch information
tutinoko2048 committed May 27, 2024
1 parent 37f5aa7 commit 52bb73d
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 22 deletions.
9 changes: 8 additions & 1 deletion .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,14 @@
"import/no-unresolved": "error",
"import/no-cycle": "error",
"no-dupe-class-members": "off",
"@typescript-eslint/no-dupe-class-members": "error"
"@typescript-eslint/no-dupe-class-members": "error",
"no-redeclare": "off",
"@typescript-eslint/no-redeclare": [
"error",
{
"ignoreDeclarationMerge": true
}
]
},
"parserOptions": {
"ecmaVersion": 13,
Expand Down
2 changes: 1 addition & 1 deletion src/database/tables.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { PlayerDataEntry } from '@/storage/PlayerData';
import { type PlayerDataEntry } from '@/storage/PlayerData';
import { DynamicDatabase } from './DynamicDatabase';

export const TABLES = {
Expand Down
54 changes: 34 additions & 20 deletions src/storage/PlayerPermission.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,43 @@
import { TABLES } from '@/database/tables';
import { Player } from '@minecraft/server';
import { DynamicProperty } from '@/utils/DynamicProperty';
import { type Player } from '@minecraft/server';

export enum PlayerPermissionType {
Member,
Moderator,
Admin
}

export enum PermissionFlags {
Ban = 1 << 0,
Kick = 1 << 1,
TempKick = 1 << 2,
Mute = 1 << 3,
Freeze = 1 << 4,
EditConfig = 1 << 5,
ReceiveLogs = 1 << 6,
}
export const PermissionFlags = {
Ban: 1 << 0,
Kick: 1 << 1,
TempKick: 1 << 2,
Mute: 1 << 3,
Freeze: 1 << 4,
EditConfig: 1 << 5,
ReceiveLogs: 1 << 6,
} as const;
export type PermissionFlags = typeof PermissionFlags[keyof typeof PermissionFlags];

Check failure on line 20 in src/storage/PlayerPermission.ts

View workflow job for this annotation

GitHub Actions / Lint and Build

'PermissionFlags' is already defined

const PermissionPropertyKeyMap = {
[PlayerPermissionType.Member]: 'memberPermission',
[PlayerPermissionType.Moderator]: 'moderatorPermission',
[PlayerPermissionType.Admin]: 'adminPermission',
} as const;

export class PlayerPermission {
static get(player: Player): PlayerPermissionType {
return TABLES.players.get(player.id)?.permission ?? PlayerPermissionType.Member;
}

static set(player: Player, permissionType: PlayerPermissionType): void {
const data = TABLES.players.get(player.id);
if (data) {
data.permission = permissionType;
TABLES.players.set(player.id, data);
}
}

static has(player: Player, permissionType: PlayerPermissionType): boolean {
return this.get(player) === permissionType;
}
Expand All @@ -32,19 +48,17 @@ export class PlayerPermission {
return flags.includes(flag);
}

static set(player: Player, permissionType: PlayerPermissionType): void {
const data = TABLES.players.get(player.id);
if (data) {
data.permission = permissionType;
TABLES.players.set(player.id, data);
}
}

static getDefaultFlags(permissionType: PlayerPermissionType): PermissionFlags[] {

const key = PermissionPropertyKeyMap[permissionType];
const bits = DynamicProperty.get(undefined, key) ?? 0;
return Object.values(PermissionFlags).filter(flag => (bits & flag) === flag);
}

static setDefaultFlags(permissionType: PlayerPermissionType, flags: PermissionFlags[]): void {}
static setDefaultFlags(permissionType: PlayerPermissionType, flags: PermissionFlags[]): void {
const key = PermissionPropertyKeyMap[permissionType];
const bits = flags.reduce((acc, flag) => acc | flag, 0);
DynamicProperty.set(undefined, key, bits);
}
}

export namespace PlayerPermission {
Expand Down
3 changes: 3 additions & 0 deletions src/utils/DynamicProperty.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ import { Entity, world } from '@minecraft/server';
export interface DynamicPropertyTypeMap {
generalConfig: string;
moduleConfig: string;
memberPermission: number;
moderatorPermission: number;
adminPermission: number;
}

export class DynamicProperty {
Expand Down

0 comments on commit 52bb73d

Please sign in to comment.