+
+ TPS
+ = 18 ? 'text-mc-green' :
+ serverPerformance.tps >= 15 ? 'text-yellow-400' : 'text-red-400'
+ }`}>
+ {serverPerformance.tps.toFixed(1)}
+
+
+
+
= 18 ? 'bg-mc-green' :
+ serverPerformance.tps >= 15 ? 'bg-yellow-400' : 'bg-red-400'
+ }`}
+ style={{ width: `${Math.min(100, (serverPerformance.tps / 20) * 100)}%` }}
+ />
+
+
+
+ {/* CPU */}
+
+
+ CPU
+
+ {serverPerformance.cpu.toFixed(0)}%
+
+
+
+
+
+ {/* 메모리 */}
+
+
+ 메모리
+
+ {(serverPerformance.memory.used / 1024).toFixed(1)}GB
+
+
+
+
0.9 ? 'bg-red-400' :
+ (serverPerformance.memory.used / serverPerformance.memory.max) > 0.7 ? 'bg-yellow-400' : 'bg-mc-diamond'
+ }`}
+ style={{ width: `${(serverPerformance.memory.used / serverPerformance.memory.max) * 100}%` }}
+ />
+
+
+
+
+
📝 콘솔 로그
{[
{ id: 'all', label: '전체' },
- { id: 'online', label: '온라인' },
- { id: 'offline', label: '오프라인' },
- { id: 'banned', label: '차단됨' },
+ { id: 'banned', label: '밴' },
+ { id: 'whitelist', label: '화이트리스트' },
].map(filter => (
))}
- {/* 플레이어 그리드 */}
-
- {filteredPlayers.map((player) => (
+ {/* 화이트리스트 필터 선택 시 */}
+ {playerFilter === 'whitelist' ? (
+
+ {/* 화이트리스트 On/Off 토글 */}
+
+
+ {/* 플레이어 추가 */}
+
+ setNewWhitelistPlayer(e.target.value)}
+ onKeyDown={(e) => {
+ if (e.key === 'Enter') {
+ addWhitelistPlayer(newWhitelistPlayer);
+ }
+ }}
+ placeholder="플레이어 이름 입력..."
+ className="flex-1 bg-zinc-800 border border-zinc-700 rounded-lg px-3 py-2 text-white text-sm placeholder-zinc-500 focus:outline-none focus:border-mc-green/50"
+ />
+
+
+
+ {/* 화이트리스트 플레이어 그리드 */}
+ {whitelistPlayers.length > 0 ? (
+
+ {whitelistPlayers.map(player => (
+
+
+
+ {player.name}
+
+ ))}
+
+ ) : (
+
+ 화이트리스트가 비어있습니다
+
+ )}
+
+ ) : (
+ /* 플레이어 그리드 */
+
+ {filteredPlayers.map((player) => (
{/* 전신 아바타 */}
-

@@ -1075,7 +1383,8 @@ export default function Admin({ isMobile = false }) {
))}
-