├── log.txt ├── .eslintrc.json ├── public ├── favicon.ico └── replit.svg ├── postcss.config.js ├── styles └── globals.css ├── next-env.d.ts ├── pages ├── _app.tsx ├── api │ ├── hello.ts │ ├── checkHost.ts │ └── sendMessage.ts └── index.tsx ├── next.config.js ├── tailwind.config.js ├── components ├── Header.tsx ├── Console.tsx └── Auth.tsx ├── .gitignore ├── tsconfig.json ├── package.json ├── README.md └── utils └── autocomplete.json /log.txt: -------------------------------------------------------------------------------- 1 | 221 -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kardespro/controlmc/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /styles/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | body{ 5 | @apply bg-[#281640] 6 | } -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import '../styles/globals.css' 2 | import type { AppProps } from 'next/app' 3 | 4 | function MyApp({ Component, pageProps }: AppProps) { 5 | return 6 | } 7 | 8 | export default MyApp 9 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | generateBuildId: async () => { 5 | return 'controlmc' 6 | }, 7 | } 8 | 9 | module.exports = nextConfig 10 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | "./app/**/*.{js,ts,jsx,tsx}", 5 | "./pages/**/*.{js,ts,jsx,tsx}", 6 | "./components/**/*.{js,ts,jsx,tsx}", 7 | ], 8 | theme: { 9 | extend: {}, 10 | }, 11 | plugins: [], 12 | } -------------------------------------------------------------------------------- /components/Header.tsx: -------------------------------------------------------------------------------- 1 | export default function Header() { 2 | return ( 3 | <> 4 |
5 |
6 |

ControlMC

7 |
8 |
9 | 10 | ) 11 | } -------------------------------------------------------------------------------- /pages/api/hello.ts: -------------------------------------------------------------------------------- 1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 2 | import type { NextApiRequest, NextApiResponse } from 'next' 3 | 4 | type Data = { 5 | name: string 6 | } 7 | 8 | export default function handler( 9 | req: NextApiRequest, 10 | res: NextApiResponse 11 | ) { 12 | res.status(200).json({ name: 'John Doe' }) 13 | } 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true 17 | }, 18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /components/Console.tsx: -------------------------------------------------------------------------------- 1 | interface ConsoleProps { 2 | command: string; 3 | message: string; 4 | } 5 | 6 | const Console: React.FC = ({ command, message }) => { 7 | return ( 8 | <> 9 |
10 |
11 |

root@controlmc : {command}

12 |
13 |
14 |

15 | [Server] {message} 16 |

17 |
18 |
19 | 20 | ); 21 | }; 22 | 23 | export default Console; 24 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "my-app", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "axios": "^1.4.0", 13 | "next": "12.2.0", 14 | "rcon-client": "^4.2.3", 15 | "react": "18.2.0", 16 | "react-dom": "18.2.0" 17 | }, 18 | "devDependencies": { 19 | "@types/node": "18.0.1", 20 | "@types/react": "18.0.14", 21 | "@types/react-dom": "18.0.5", 22 | "autoprefixer": "^10.4.13", 23 | "eslint": "8.19.0", 24 | "eslint-config-next": "12.2.0", 25 | "postcss": "^8.4.19", 26 | "tailwindcss": "^3.2.4", 27 | "typescript": "4.7.4" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /components/Auth.tsx: -------------------------------------------------------------------------------- 1 | export default function Authenication(){ 2 | return( 3 | <> 4 |
5 |
6 |
7 |
8 |
9 | 10 | 11 | 12 |
13 |

Authenicating...

14 |
15 | 16 |
17 |
18 |
19 | 20 | ) 21 | } -------------------------------------------------------------------------------- /pages/api/checkHost.ts: -------------------------------------------------------------------------------- 1 | import { NextApiRequest, NextApiResponse } from 'next'; 2 | import { Rcon } from 'rcon-client'; 3 | 4 | interface QueryParams { 5 | host: string; 6 | port: number; 7 | password: string; 8 | } 9 | 10 | interface ResponseData { 11 | status: number; 12 | message: string; 13 | } 14 | 15 | export default async function handler( 16 | req: NextApiRequest, 17 | res: NextApiResponse 18 | ) { 19 | const { host, port, password } = req.query; 20 | if (typeof host !== 'string' || typeof port !== 'string' || typeof password !== 'string') { 21 | return res.status(400).json({ status: 400, message: 'Missing or invalid parameters' }); 22 | } 23 | 24 | const parsedPort = parseInt(port, 10); 25 | if (isNaN(parsedPort)) { 26 | return res.status(400).json({ status: 400, message: 'Invalid port number' }); 27 | } 28 | 29 | const queryParams: QueryParams = { 30 | host, 31 | port: parsedPort, 32 | password, 33 | }; 34 | 35 | const rcon = new Rcon({ 36 | host: queryParams.host, 37 | port: queryParams.port, 38 | password: queryParams.password, 39 | }); 40 | 41 | try { 42 | await rcon.connect(); 43 | res.status(200).json({ status: 200, message: 'Connected' }); 44 | } catch (error: any) { 45 | res.status(500).json({ status: 500, message: 'An error occurred while connecting' }); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /public/replit.svg: -------------------------------------------------------------------------------- 1 | replit logo -------------------------------------------------------------------------------- /pages/api/sendMessage.ts: -------------------------------------------------------------------------------- 1 | import { NextApiRequest, NextApiResponse } from 'next'; 2 | import { Rcon } from 'rcon-client'; 3 | 4 | interface QueryParams { 5 | host: string; 6 | port: number; 7 | password: string; 8 | message: string; 9 | } 10 | 11 | interface ResponseData { 12 | status: number; 13 | message: string; 14 | } 15 | 16 | export default async function handler( 17 | req: NextApiRequest, 18 | res: NextApiResponse 19 | ) { 20 | const { host, port, password, message } = req.query; 21 | if (!host || !port || !password || !message) { 22 | return res.status(400).json({ status: 400, message: 'Missing parameters' }); 23 | } 24 | 25 | const parsedPort = parseInt(port as string, 10); 26 | if (isNaN(parsedPort)) { 27 | return res.status(400).json({ status: 400, message: 'Invalid port number' }); 28 | } 29 | 30 | const queryParams: QueryParams = { 31 | host: host as string, 32 | port: parsedPort, 33 | password: password as string, 34 | message: message as string, 35 | }; 36 | 37 | const rcon = new Rcon({ 38 | host: queryParams.host, 39 | port: queryParams.port, 40 | password: queryParams.password, 41 | }); 42 | 43 | try { 44 | await rcon.connect(); 45 | const response = await rcon.send(queryParams.message); 46 | res.status(200).json({ status: 200, message: response }); 47 | } catch (error: any) { 48 | res.status(500).json({ status: 500, message: 'An error occurred while connecting' }); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # ControlMC - Minecraft Pocket Edition Control Panel 3 | 4 | [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) 5 | 6 | ControlMC is a web-based control panel for managing Minecraft Pocket Edition servers using the RCON (Remote Console) protocol. It allows you to perform various server management tasks through an easy-to-use web interface. 7 | 8 | ## Features 9 | 10 | - Connect to your Minecraft Pocket Edition server using RCON protocol 11 | - Execute commands directly from the control panel 12 | - Manage players, ban/unban users 13 | - View server logs and real-time console output 14 | - Easy-to-use and mobile-friendly user interface 15 | 16 | ## Built With 17 | 18 | - [Next.js](https://nextjs.org/) - The React framework for production 19 | - [TypeScript](https://www.typescriptlang.org/) - Typed JavaScript at Any Scale 20 | - [Tailwind CSS](https://tailwindcss.com/) - A utility-first CSS framework 21 | - [RCON Protocol](https://wiki.vg/RCON) - The protocol used to communicate with the Minecraft server 22 | 23 | ## Getting Started 24 | 25 | ### Prerequisites 26 | 27 | - Node.js and npm installed on your machine. 28 | 29 | ### Installation 30 | 31 | 1. Clone the repository: 32 | 33 | ```bash 34 | git clone https://github.com/kardespro/ControlMC.git 35 | cd ControlMC 36 | ``` 37 | 38 | 2. Install dependencies: 39 | 40 | ```bash 41 | npm install 42 | ``` 43 | 44 | ### Usage 45 | 46 | 1. Set up your Minecraft server with RCON enabled and get the RCON credentials (hostname, port, and RCON password). 47 | 48 | 2. Start the development server: 49 | 50 | ```bash 51 | npm run dev 52 | ``` 53 | or 54 | 55 | ```bash 56 | npm run build && npm run start 57 | ``` 58 | 59 | 4. Open your browser and go to `http://localhost:3000` to access the ControlMC control panel. 60 | 61 | ## Contributing 62 | 63 | Contributions are welcome! Feel free to open issues and submit pull requests. 64 | 65 | ## License 66 | 67 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. -------------------------------------------------------------------------------- /pages/index.tsx: -------------------------------------------------------------------------------- 1 | import { NextPage } from 'next'; 2 | import Head from 'next/head'; 3 | import Header from '../components/Header'; 4 | import { useEffect, useState } from 'react'; 5 | import axios from 'axios'; 6 | import Auth from '../components/Auth'; 7 | import Console from '../components/Console'; 8 | 9 | interface FormData { 10 | host: string; 11 | password: string; 12 | port: string; 13 | } 14 | 15 | const Home: NextPage = () => { 16 | const [authenticated, setAuthenticated] = useState(false); 17 | const [loading, setLoading] = useState(false); 18 | const [output, setOutput] = useState<{ command: string; message: string }>({ command: '', message: '' }); 19 | 20 | useEffect(() => { 21 | (async () => { 22 | let w = window.localStorage.getItem('creds'); 23 | if (w === null) { 24 | w = ''; // Convert null to an empty string 25 | } 26 | let parsed: FormData = JSON.parse(w); 27 | if (parsed.host && parsed.password && parsed.port) { 28 | try { 29 | let data = await axios.get(`/api/checkHost?host=${parsed.host}&password=${parsed.password}&port=${parsed.port}`); 30 | if (data.data.status === 200) { 31 | setLoading(true); 32 | setAuthenticated(true); 33 | setTimeout(() => setLoading(false), 3000); 34 | } else { 35 | setAuthenticated(false); 36 | } 37 | } catch (error) { 38 | setAuthenticated(false); 39 | } 40 | } 41 | })(); 42 | }, []); 43 | 44 | const handleSubmit = async (e: React.FormEvent) => { 45 | e.preventDefault(); 46 | setLoading(true); 47 | 48 | const formData: FormData = { 49 | host: e.currentTarget.host.value, 50 | password: e.currentTarget.password.value, 51 | port: e.currentTarget.port.value, 52 | }; 53 | 54 | try { 55 | let data = await axios.get(`/api/checkHost?host=${formData.host}&password=${formData.password}&port=${formData.port}`); 56 | if (data.data.status === 200) { 57 | setLoading(true); 58 | setAuthenticated(true); 59 | window.localStorage.setItem('creds', JSON.stringify(formData)); 60 | setTimeout(() => setLoading(false), 3000); 61 | } else { 62 | setLoading(false); 63 | setAuthenticated(false); 64 | } 65 | } catch (error) { 66 | setLoading(false); 67 | setAuthenticated(false); 68 | } 69 | }; 70 | 71 | const handleSubmitCommand = async (e: React.FormEvent) => { 72 | e.preventDefault(); 73 | let w = window.localStorage.getItem('creds'); 74 | if (w === null) { 75 | return; 76 | } 77 | let parsed: FormData = JSON.parse(w); 78 | try { 79 | let d = await axios.get(`/api/sendMessage?host=${parsed.host}&port=${parsed.port}&password=${parsed.password}&message=${e.currentTarget.command.value}`); 80 | setOutput({ 81 | command: e.currentTarget.command.value, 82 | message: d.data.message, 83 | }); 84 | } catch (err) { 85 | console.log('Invalid Rcon Session or Expired'); 86 | setOutput({ 87 | command: 'try again', 88 | message: 'Invalid Rcon Session or Expired', 89 | }); 90 | } 91 | }; 92 | 93 | return ( 94 | <> 95 | 96 | ControlMC 97 | 98 | 99 | 100 |
101 |
102 | {authenticated ? ( 103 | <> 104 | {loading ? ( 105 | 106 | ) : ( 107 | <> 108 |
109 |
110 |
111 | {output.command !== '' ? ( 112 | <> 113 | 114 | 115 | ) : ( 116 | <> 117 | 118 | 119 | )} 120 |
121 |
122 | 129 |
130 |
131 |
132 |
133 |
134 | 135 | )} 136 | 137 | ) : ( 138 | <> 139 | {loading ? ( 140 | 141 | ) : ( 142 | <> 143 |
144 |
145 |
146 |
147 |
148 | 154 |
155 | 156 |
157 | 164 |
165 |
166 | 173 |
174 |
175 | 178 |
179 |
180 |
181 |
182 |
183 | 184 | )} 185 | 186 | )} 187 |
188 | 189 | ); 190 | }; 191 | 192 | export default Home; 193 | -------------------------------------------------------------------------------- /utils/autocomplete.json: -------------------------------------------------------------------------------- 1 | [ 2 | "achievement give *", 3 | "achievement give * ", 4 | "achievement give ", 5 | "achievement give ", 6 | "achievement take *", 7 | "achievement take * ", 8 | "achievement take ", 9 | "achievement take ", 10 | "ban ", 11 | "ban ", 12 | "ban-ip
", 13 | "ban-ip ", 14 | "ban-ip
", 15 | "ban-ip ", 16 | "banlist ips", 17 | "banlist players", 18 | "blockdata ", 19 | "clear", 20 | "clear ", 21 | "clear ", 22 | "clear ", 23 | "clear ", 24 | "clear ", 25 | "clone ", 26 | "clone filtered force ", 27 | "clone filtered force ", 28 | "clone filtered force ", 29 | "clone filtered move ", 30 | "clone filtered move ", 31 | "clone filtered move ", 32 | "clone filtered normal ", 33 | "clone filtered normal ", 34 | "clone filtered normal ", 35 | "clone masked", 36 | "clone masked force ", 37 | "clone masked force ", 38 | "clone masked force ", 39 | "clone masked move ", 40 | "clone masked move ", 41 | "clone masked move ", 42 | "clone masked normal ", 43 | "clone masked normal ", 44 | "clone masked normal ", 45 | "clone replace", 46 | "clone replace force ", 47 | "clone replace force ", 48 | "clone replace force ", 49 | "clone replace move ", 50 | "clone replace move ", 51 | "clone replace move ", 52 | "clone replace normal ", 53 | "clone replace normal ", 54 | "clone replace normal ", 55 | "debug start", 56 | "debug stop", 57 | "defaultgamemode survival", 58 | "defaultgamemode creative", 59 | "defaultgamemode adventure", 60 | "defaultgamemode spectator", 61 | "deop ", 62 | "difficulty peaceful", 63 | "difficulty easy", 64 | "difficulty normal", 65 | "difficulty hard", 66 | "effect clear", 67 | "effect minecraft:speed", 68 | "effect minecraft:speed ", 69 | "effect minecraft:speed ", 70 | "effect minecraft:speed true", 71 | "effect minecraft:speed false", 72 | "effect minecraft:slowness", 73 | "effect minecraft:slowness ", 74 | "effect minecraft:slowness ", 75 | "effect minecraft:slowness true", 76 | "effect minecraft:slowness false", 77 | "effect minecraft:haste", 78 | "effect minecraft:haste ", 79 | "effect minecraft:haste ", 80 | "effect minecraft:haste true", 81 | "effect minecraft:haste false", 82 | "effect minecraft:mining_fatigue", 83 | "effect minecraft:mining_fatigue ", 84 | "effect minecraft:mining_fatigue ", 85 | "effect minecraft:mining_fatigue true", 86 | "effect minecraft:mining_fatigue false", 87 | "effect minecraft:strength", 88 | "effect minecraft:strength ", 89 | "effect minecraft:strength ", 90 | "effect minecraft:strength true", 91 | "effect minecraft:strength false", 92 | "effect minecraft:instant_health", 93 | "effect minecraft:instant_health ", 94 | "effect minecraft:instant_health ", 95 | "effect minecraft:instant_health true", 96 | "effect minecraft:instant_health false", 97 | "effect minecraft:instant_damage", 98 | "effect minecraft:instant_damage ", 99 | "effect minecraft:instant_damage ", 100 | "effect minecraft:instant_damage true", 101 | "effect minecraft:instant_damage false", 102 | "effect minecraft:jump_boost", 103 | "effect minecraft:jump_boost ", 104 | "effect minecraft:jump_boost ", 105 | "effect minecraft:jump_boost true", 106 | "effect minecraft:jump_boost false", 107 | "effect minecraft:nausea", 108 | "effect minecraft:nausea ", 109 | "effect minecraft:nausea ", 110 | "effect minecraft:nausea true", 111 | "effect minecraft:nausea false", 112 | "effect minecraft:regeneration", 113 | "effect minecraft:regeneration ", 114 | "effect minecraft:regeneration ", 115 | "effect minecraft:regeneration true", 116 | "effect minecraft:regeneration false", 117 | "effect minecraft:resistance", 118 | "effect minecraft:resistance ", 119 | "effect minecraft:resistance ", 120 | "effect minecraft:resistance true", 121 | "effect minecraft:resistance false", 122 | "effect minecraft:fire_resistance", 123 | "effect minecraft:fire_resistance ", 124 | "effect minecraft:fire_resistance ", 125 | "effect minecraft:fire_resistance true", 126 | "effect minecraft:fire_resistance false", 127 | "effect minecraft:water_breathing", 128 | "effect minecraft:water_breathing ", 129 | "effect minecraft:water_breathing ", 130 | "effect minecraft:water_breathing true", 131 | "effect minecraft:water_breathing false", 132 | "effect minecraft:invisibility", 133 | "effect minecraft:invisibility ", 134 | "effect minecraft:invisibility ", 135 | "effect minecraft:invisibility true", 136 | "effect minecraft:invisibility false", 137 | "effect minecraft:blindness", 138 | "effect minecraft:blindness ", 139 | "effect minecraft:blindness ", 140 | "effect minecraft:blindness true", 141 | "effect minecraft:blindness false", 142 | "effect minecraft:night_vision", 143 | "effect minecraft:night_vision ", 144 | "effect minecraft:night_vision ", 145 | "effect minecraft:night_vision true", 146 | "effect minecraft:night_vision false", 147 | "effect minecraft:hunger", 148 | "effect minecraft:hunger ", 149 | "effect minecraft:hunger ", 150 | "effect minecraft:hunger true", 151 | "effect minecraft:hunger false", 152 | "effect minecraft:weakness", 153 | "effect minecraft:weakness ", 154 | "effect minecraft:weakness ", 155 | "effect minecraft:weakness true", 156 | "effect minecraft:weakness false", 157 | "effect minecraft:poison", 158 | "effect minecraft:poison ", 159 | "effect minecraft:poison ", 160 | "effect minecraft:poison true", 161 | "effect minecraft:poison false", 162 | "effect minecraft:wither", 163 | "effect minecraft:wither ", 164 | "effect minecraft:wither ", 165 | "effect minecraft:wither true", 166 | "effect minecraft:wither false", 167 | "effect minecraft:health_boost", 168 | "effect minecraft:health_boost ", 169 | "effect minecraft:health_boost ", 170 | "effect minecraft:health_boost true", 171 | "effect minecraft:health_boost false", 172 | "effect minecraft:absorption", 173 | "effect minecraft:absorption ", 174 | "effect minecraft:absorption ", 175 | "effect minecraft:absorption true", 176 | "effect minecraft:absorption false", 177 | "effect minecraft:saturation", 178 | "effect minecraft:saturation ", 179 | "effect minecraft:saturation ", 180 | "effect minecraft:saturation true", 181 | "effect minecraft:saturation false", 182 | "effect minecraft:glowing", 183 | "effect minecraft:glowing ", 184 | "effect minecraft:glowing ", 185 | "effect minecraft:glowing true", 186 | "effect minecraft:glowing false", 187 | "effect minecraft:levitation", 188 | "effect minecraft:levitation ", 189 | "effect minecraft:levitation ", 190 | "effect minecraft:levitation true", 191 | "effect minecraft:levitation false", 192 | "effect minecraft:luck", 193 | "effect minecraft:luck ", 194 | "effect minecraft:luck ", 195 | "effect minecraft:luck true", 196 | "effect minecraft:luck false", 197 | "effect minecraft:unluck", 198 | "effect minecraft:unluck ", 199 | "effect minecraft:unluck ", 200 | "effect minecraft:unluck true", 201 | "effect minecraft:unluck false", 202 | "enchant minecraft:protection", 203 | "enchant minecraft:protection ", 204 | "enchant minecraft:fire_protection", 205 | "enchant minecraft:fire_protection ", 206 | "enchant minecraft:feather_falling", 207 | "enchant minecraft:feather_falling ", 208 | "enchant minecraft:blast_protection", 209 | "enchant minecraft:blast_protection ", 210 | "enchant minecraft:projectile_protection", 211 | "enchant minecraft:projectile_protection ", 212 | "enchant minecraft:respiration", 213 | "enchant minecraft:respiration ", 214 | "enchant minecraft:aqua_affinity", 215 | "enchant minecraft:aqua_affinity ", 216 | "enchant minecraft:thorns", 217 | "enchant minecraft:thorns ", 218 | "enchant minecraft:depth_strider", 219 | "enchant minecraft:depth_strider ", 220 | "enchant minecraft:frost_walker", 221 | "enchant minecraft:frost_walker ", 222 | "enchant minecraft:binding_curse", 223 | "enchant minecraft:binding_curse ", 224 | "enchant minecraft:sharpness", 225 | "enchant minecraft:sharpness ", 226 | "enchant minecraft:smite", 227 | "enchant minecraft:smite ", 228 | "enchant minecraft:bane_of_arthropods", 229 | "enchant minecraft:bane_of_arthropods ", 230 | "enchant minecraft:knockback", 231 | "enchant minecraft:knockback ", 232 | "enchant minecraft:fire_aspect", 233 | "enchant minecraft:fire_aspect ", 234 | "enchant minecraft:looting", 235 | "enchant minecraft:looting ", 236 | "enchant minecraft:sweeping", 237 | "enchant minecraft:sweeping ", 238 | "enchant minecraft:efficiency", 239 | "enchant minecraft:efficiency ", 240 | "enchant minecraft:silk_touch", 241 | "enchant minecraft:silk_touch ", 242 | "enchant minecraft:unbreaking", 243 | "enchant minecraft:unbreaking ", 244 | "enchant minecraft:fortune", 245 | "enchant minecraft:fortune ", 246 | "enchant minecraft:power", 247 | "enchant minecraft:power ", 248 | "enchant minecraft:punch", 249 | "enchant minecraft:punch ", 250 | "enchant minecraft:flame", 251 | "enchant minecraft:flame ", 252 | "enchant minecraft:infinity", 253 | "enchant minecraft:infinity ", 254 | "enchant minecraft:luck_of_the_sea", 255 | "enchant minecraft:luck_of_the_sea ", 256 | "enchant minecraft:lure", 257 | "enchant minecraft:lure ", 258 | "enchant minecraft:mending", 259 | "enchant minecraft:mending ", 260 | "enchant minecraft:vanishing_curse", 261 | "enchant minecraft:vanishing_curse ", 262 | "entitydata ", 263 | "execute ", 264 | "execute detect ", 265 | "fill ", 266 | "fill ", 267 | "fill ", 268 | "fill destroy", 269 | "fill destroy", 270 | "fill destroy ", 271 | "fill destroy ", 272 | "fill hollow", 273 | "fill hollow", 274 | "fill hollow ", 275 | "fill hollow ", 276 | "fill keep", 277 | "fill keep", 278 | "fill keep ", 279 | "fill keep ", 280 | "fill outline", 281 | "fill outline", 282 | "fill outline ", 283 | "fill outline ", 284 | "fill replace", 285 | "fill replace", 286 | "fill replace ", 287 | "fill replace ", 288 | "fill replace ", 289 | "fill replace ", 290 | "gamemode survival", 291 | "gamemode survival ", 292 | "gamemode creative", 293 | "gamemode creative ", 294 | "gamemode adventure", 295 | "gamemode adventure ", 296 | "gamemode spectator", 297 | "gamemode spectator ", 298 | "gamerule ", 299 | "gamerule commandBlockOutput true", 300 | "gamerule commandBlockOutput false", 301 | "gamerule disableElytraMovementCheck true", 302 | "gamerule disableElytraMovementCheck false", 303 | "gamerule doDaylightCycle true", 304 | "gamerule doDaylightCycle false", 305 | "gamerule doDaylightCycle true", 306 | "gamerule doDaylightCycle false", 307 | "gamerule doEntityDrops true", 308 | "gamerule doEntityDrops false", 309 | "gamerule doFireTick true", 310 | "gamerule doFireTick false", 311 | "gamerule doMobLoot true", 312 | "gamerule doMobLoot false", 313 | "gamerule doMobSpawning true", 314 | "gamerule doMobSpawning false", 315 | "gamerule doWeatherCycle true", 316 | "gamerule doWeatherCycle false", 317 | "gamerule keepInventory true", 318 | "gamerule keepInventory false", 319 | "gamerule logAdminCommands true", 320 | "gamerule logAdminCommands false", 321 | "gamerule maxEntityCramming 24", 322 | "gamerule maxEntityCramming ", 323 | "gamerule naturalRegeneration true", 324 | "gamerule naturalRegeneration false", 325 | "gamerule randomTickSpeed 3", 326 | "gamerule randomTickSpeed ", 327 | "gamerule reducedDebugInfo true", 328 | "gamerule reducedDebugInfo false", 329 | "gamerule sendCommandFeedback true", 330 | "gamerule sendCommandFeedback false", 331 | "gamerule showDeathMessages true", 332 | "gamerule showDeathMessages false", 333 | "gamerule spawnRadius 10", 334 | "gamerule spawnRadius ", 335 | "gamerule spectatorsGenerateChunks true", 336 | "gamerule spectatorsGenerateChunks false", 337 | "give ", 338 | "give ", 339 | "give ", 340 | "give ", 341 | "help", 342 | "help ", 343 | "help ", 344 | "kick ", 345 | "kick ", 346 | "kill", 347 | "kill ", 348 | "kill ", 349 | "list", 350 | "list ", 351 | "locate EndCity", 352 | "locate Fortress", 353 | "locate Mansion", 354 | "locate Mineshaft", 355 | "locate Monument", 356 | "locate Stronghold", 357 | "locate Temple", 358 | "locate Village", 359 | "me ", 360 | "op ", 361 | "pardon ", 362 | "pardon-ip
", 363 | "particle ", 364 | "particle ", 365 | "particle ", 366 | "particle ", 367 | "particle ", 368 | "playsound master ", 369 | "playsound master ", 370 | "playsound master ", 371 | "playsound master ", 372 | "playsound master ", 373 | "playsound music ", 374 | "playsound music ", 375 | "playsound music ", 376 | "playsound music ", 377 | "playsound music ", 378 | "playsound record ", 379 | "playsound record ", 380 | "playsound record ", 381 | "playsound record ", 382 | "playsound record ", 383 | "playsound weather ", 384 | "playsound weather ", 385 | "playsound weather ", 386 | "playsound weather ", 387 | "playsound weather ", 388 | "playsound block ", 389 | "playsound block ", 390 | "playsound block ", 391 | "playsound block ", 392 | "playsound block ", 393 | "playsound hostile ", 394 | "playsound hostile ", 395 | "playsound hostile ", 396 | "playsound hostile ", 397 | "playsound hostile ", 398 | "playsound neutral ", 399 | "playsound neutral ", 400 | "playsound neutral ", 401 | "playsound neutral ", 402 | "playsound neutral ", 403 | "playsound player ", 404 | "playsound player ", 405 | "playsound player ", 406 | "playsound player ", 407 | "playsound player ", 408 | "playsound ambiant ", 409 | "playsound ambiant ", 410 | "playsound ambiant ", 411 | "playsound ambiant ", 412 | "playsound ambiant ", 413 | "playsound voice ", 414 | "playsound voice ", 415 | "playsound voice ", 416 | "playsound voice ", 417 | "playsound voice ", 418 | "publish", 419 | "replaceitem block slot.armor.chest ", 420 | "replaceitem block slot.armor.chest ", 421 | "replaceitem block slot.armor.chest ", 422 | "replaceitem block slot.armor.chest ", 423 | "replaceitem entity slot.armor.chest ", 424 | "replaceitem entity slot.armor.chest ", 425 | "replaceitem entity slot.armor.chest ", 426 | "replaceitem entity slot.armor.chest ", 427 | "replaceitem block slot.armor.feet ", 428 | "replaceitem block slot.armor.feet ", 429 | "replaceitem block slot.armor.feet ", 430 | "replaceitem block slot.armor.feet ", 431 | "replaceitem entity slot.armor.feet ", 432 | "replaceitem entity slot.armor.feet ", 433 | "replaceitem entity slot.armor.feet ", 434 | "replaceitem entity slot.armor.feet ", 435 | "replaceitem block slot.armor.head ", 436 | "replaceitem block slot.armor.head ", 437 | "replaceitem block slot.armor.head ", 438 | "replaceitem block slot.armor.head ", 439 | "replaceitem entity slot.armor.head ", 440 | "replaceitem entity slot.armor.head ", 441 | "replaceitem entity slot.armor.head ", 442 | "replaceitem entity slot.armor.head ", 443 | "replaceitem block slot.armor.legs ", 444 | "replaceitem block slot.armor.legs ", 445 | "replaceitem block slot.armor.legs ", 446 | "replaceitem block slot.armor.legs ", 447 | "replaceitem entity slot.armor.legs ", 448 | "replaceitem entity slot.armor.legs ", 449 | "replaceitem entity slot.armor.legs ", 450 | "replaceitem entity slot.armor.legs ", 451 | "replaceitem block slot.weapon.mainhand ", 452 | "replaceitem block slot.weapon.mainhand ", 453 | "replaceitem block slot.weapon.mainhand ", 454 | "replaceitem block slot.weapon.mainhand ", 455 | "replaceitem entity slot.weapon.mainhand ", 456 | "replaceitem entity slot.weapon.mainhand ", 457 | "replaceitem entity slot.weapon.mainhand ", 458 | "replaceitem entity slot.weapon.mainhand ", 459 | "replaceitem block slot.weapon.offhand ", 460 | "replaceitem block slot.weapon.offhand ", 461 | "replaceitem block slot.weapon.offhand ", 462 | "replaceitem block slot.weapon.offhand ", 463 | "replaceitem entity slot.weapon.offhand ", 464 | "replaceitem entity slot.weapon.offhand ", 465 | "replaceitem entity slot.weapon.offhand ", 466 | "replaceitem entity slot.weapon.offhand ", 467 | "replaceitem block slot.enderchest. ", 468 | "replaceitem block slot.enderchest. ", 469 | "replaceitem block slot.enderchest. ", 470 | "replaceitem block slot.enderchest. ", 471 | "replaceitem entity slot.enderchest. ", 472 | "replaceitem entity slot.enderchest. ", 473 | "replaceitem entity slot.enderchest. ", 474 | "replaceitem entity slot.enderchest. ", 475 | "replaceitem block slot.hotbar. ", 476 | "replaceitem block slot.hotbar. ", 477 | "replaceitem block slot.hotbar. ", 478 | "replaceitem block slot.hotbar. ", 479 | "replaceitem entity slot.hotbar. ", 480 | "replaceitem entity slot.hotbar. ", 481 | "replaceitem entity slot.hotbar. ", 482 | "replaceitem entity slot.hotbar. ", 483 | "replaceitem block slot.inventory. ", 484 | "replaceitem block slot.inventory. ", 485 | "replaceitem block slot.inventory. ", 486 | "replaceitem block slot.inventory. ", 487 | "replaceitem entity slot.inventory. ", 488 | "replaceitem entity slot.inventory. ", 489 | "replaceitem entity slot.inventory. ", 490 | "replaceitem entity slot.inventory. ", 491 | "replaceitem block slot.horse.saddle ", 492 | "replaceitem block slot.horse.saddle ", 493 | "replaceitem block slot.horse.saddle ", 494 | "replaceitem block slot.horse.saddle ", 495 | "replaceitem entity slot.horse.saddle ", 496 | "replaceitem entity slot.horse.saddle ", 497 | "replaceitem entity slot.horse.saddle ", 498 | "replaceitem entity slot.horse.saddle ", 499 | "replaceitem block slot.horse.armor ", 500 | "replaceitem block slot.horse.armor ", 501 | "replaceitem block slot.horse.armor ", 502 | "replaceitem block slot.horse.armor ", 503 | "replaceitem entity slot.horse.armor ", 504 | "replaceitem entity slot.horse.armor ", 505 | "replaceitem entity slot.horse.armor ", 506 | "replaceitem entity slot.horse.armor ", 507 | "replaceitem block slot.horse.chest. ", 508 | "replaceitem block slot.horse.chest. ", 509 | "replaceitem block slot.horse.chest. ", 510 | "replaceitem block slot.horse.chest. ", 511 | "replaceitem entity slot.horse.chest. ", 512 | "replaceitem entity slot.horse.chest. ", 513 | "replaceitem entity slot.horse.chest. ", 514 | "replaceitem entity slot.horse.chest. ", 515 | "replaceitem block slot.villager. ", 516 | "replaceitem block slot.villager. ", 517 | "replaceitem block slot.villager. ", 518 | "replaceitem block slot.villager. ", 519 | "replaceitem entity slot.villager. ", 520 | "replaceitem entity slot.villager. ", 521 | "replaceitem entity slot.villager. ", 522 | "replaceitem entity slot.villager. ", 523 | "save-all", 524 | "save-all ", 525 | "save-off", 526 | "save-on", 527 | "say ", 528 | "scoreboard ", 529 | "scoreboard ", 530 | "scoreboard ", 531 | "seed", 532 | "setblock ", 533 | "setblock ", 534 | "setblock ", 535 | "setblock destroy", 536 | "setblock destroy", 537 | "setblock destroy ", 538 | "setblock destroy ", 539 | "setblock keep", 540 | "setblock keep", 541 | "setblock keep ", 542 | "setblock keep ", 543 | "setblock replace", 544 | "setblock replace", 545 | "setblock replace ", 546 | "setblock replace ", 547 | "setidletimeout ", 548 | "setworldspawn", 549 | "setworldspawn ", 550 | "spawnpoint", 551 | "spawnpoint ", 552 | "spawnpoint ", 553 | "spreadplayers true ", 554 | "spreadplayers false ", 555 | "stats block clear AffectedBlocks", 556 | "stats block set AffectedBlocks ", 557 | "stats entity clear AffectedBlocks", 558 | "stats entity set AffectedBlocks ", 559 | "stats block clear AffectedEntities", 560 | "stats block set AffectedEntities ", 561 | "stats entity clear AffectedEntities", 562 | "stats entity set AffectedEntities ", 563 | "stats block clear AffectedItems", 564 | "stats block set AffectedItems ", 565 | "stats entity clear AffectedItems", 566 | "stats entity set AffectedItems ", 567 | "stats block clear QueryResult", 568 | "stats block set QueryResult ", 569 | "stats entity clear QueryResult", 570 | "stats entity set QueryResult ", 571 | "stats block clear SuccessCount", 572 | "stats block set SuccessCount ", 573 | "stats entity clear SuccessCount", 574 | "stats entity set SuccessCount ", 575 | "stop", 576 | "stopsound ", 577 | "stopsound master", 578 | "stopsound master ", 579 | "stopsound music", 580 | "stopsound music ", 581 | "stopsound record", 582 | "stopsound record ", 583 | "stopsound weather", 584 | "stopsound weather ", 585 | "stopsound block", 586 | "stopsound block ", 587 | "stopsound hostile", 588 | "stopsound hostile ", 589 | "stopsound neutral", 590 | "stopsound neutral ", 591 | "stopsound player", 592 | "stopsound player ", 593 | "stopsound ambient", 594 | "stopsound ambient ", 595 | "stopsound voice", 596 | "stopsound voice ", 597 | "summon ", 598 | "summon ", 599 | "summon ", 600 | "teleport ", 601 | "teleport ", 602 | "tell ", 603 | "tellraw ", 604 | "testfor ", 605 | "testfor ", 606 | "testforblock ", 607 | "testforblock ", 608 | "testforblock ", 609 | "testforblock ", 610 | "testforblocks all", 611 | "testforblocks masked", 612 | "time ", 613 | "time ", 614 | "time ", 615 | "title clear", 616 | "title reset", 617 | "title title ", 618 | "title subtitle ", 619 | "title actionbar ", 620 | "title times ", 621 | "toggledownfall", 622 | "tp ", 623 | "tp ", 624 | "tp ", 625 | "tp ", 626 | "trigger ", 627 | "trigger ", 628 | "weather ", 629 | "weather ", 630 | "weather ", 631 | "weather ", 632 | "weather ", 633 | "weather ", 634 | "whitelist add ", 635 | "whitelist list", 636 | "whitelist off", 637 | "whitelist on", 638 | "whitelist reload", 639 | "whitelist remove ", 640 | "worldborder add ", 641 | "worldborder add