diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 2d6eca92..74357389 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1 @@ -@book000 -@Hiratake \ No newline at end of file +* @book000 @Hiratake diff --git a/.github/gen-page-preview/.gitignore b/.github/gen-page-preview/.gitignore new file mode 100644 index 00000000..97008e5b --- /dev/null +++ b/.github/gen-page-preview/.gitignore @@ -0,0 +1,2 @@ +node_modules +yarn.lock \ No newline at end of file diff --git a/.github/gen-page-preview/main.spec.ts b/.github/gen-page-preview/main.spec.ts new file mode 100644 index 00000000..f9ab1c7e --- /dev/null +++ b/.github/gen-page-preview/main.spec.ts @@ -0,0 +1,129 @@ +import { Octokit } from "@octokit/rest"; +import { Page, test } from "@playwright/test"; +import { execSync } from "child_process"; +import fs from "fs"; +import ImgurAnonymousUploader from "imgur-anonymous-uploader"; + +// 環境変数 +// GITHUB_REPOSITORY: 所有者およびリポジトリの名前 +// ISSUE_NUMBER: プルリクの番号 (envでgithub.event.numberを渡す必要あり) +// GITHUB_TOKEN: GitHub API トークン (envでsecrets.GITHUB_TOKENを渡す必要あり) +// BASE_SHA: プルリクのベース SHA +// IMGUR_CLIENT_ID: Imgur クライアント ID (オプション) + +const OWNER = process.env.GITHUB_REPOSITORY!.split("/")[0]; +const REPO = process.env.GITHUB_REPOSITORY!.split("/")[1]; +const ISSUE_NUMBER = parseInt(process.env.ISSUE_NUMBER); +const IMGUR_CLIENT_ID = process.env.IMGUR_CLIENT_ID; +const BASE_SHA = process.env.BASE_SHA; + +async function scrollFullPage(page: Page) { + await page.evaluate(async () => { + await new Promise((resolve) => { + let totalHeight = 0; + const distance = 100; + const timer = setInterval(() => { + const scrollHeight = document.body.scrollHeight; + window.scrollBy(0, distance); + totalHeight += distance; + + if (totalHeight >= scrollHeight) { + clearInterval(timer); + resolve(); + } + }, 100); + }); + }); +} + +test("page screenshot", async ({ page }) => { + const files = execSync( + "git diff --diff-filter=ACMR --name-only " + BASE_SHA + " HEAD", + { + cwd: process.env.GITHUB_WORKSPACE + "/content/", + } + ) + .toString() + .split("\n"); + + fs.mkdirSync("screenshots", { recursive: true }); + + const octokit = new Octokit({ + auth: process.env.GITHUB_TOKEN, + }); + + const screenshot_files = []; + for (const file of files.filter((s) => s.endsWith(".md"))) { + console.log("File: " + file); + const filename = file.endsWith("index.md") + ? file.slice(0, -8) + : file.endsWith(".md") + ? file.slice(0, -3) + : file; + const url = "http://localhost:3000/" + filename; + console.log("URL: " + url); + await page.goto(url, { waitUntil: "domcontentloaded" }); + await scrollFullPage(page); + await page.evaluate(() => { + window.scrollBy(0, -document.body.scrollHeight); + }); + await page.screenshot({ + path: "screenshots/" + file + ".png", + fullPage: true, + }); + screenshot_files.push(file); + } + + const screenshot_urls = []; + if (IMGUR_CLIENT_ID) { + const uploader = new ImgurAnonymousUploader(IMGUR_CLIENT_ID); + for (const screenshot_file of screenshot_files) { + const result = await uploader.upload( + "screenshots/" + screenshot_file + ".png" + ); + if (!result.success) { + console.error("Error: " + result); + continue; + } + console.log( + "Imgur uploaded: " + result.url + " (" + result.deleteHash + ")" + ); + screenshot_urls.push({ + url: result.url, + file: screenshot_file, + }); + } + } + + const images = screenshot_urls.map( + (o) => + `
\n${o.file}\n\n## ${o.file} \n\n![${o.file}](${o.url})\n
\n` + ); + const comments = await octokit.issues.listComments({ + owner: OWNER, + repo: REPO, + issue_number: ISSUE_NUMBER, + per_page: 100, + }); + for (const comment of comments.data) { + if (!comment.body.trim().startsWith("# Page Preview Images")) { + continue; + } + await octokit.issues.deleteComment({ + owner: OWNER, + repo: REPO, + comment_id: comment.id, + }); + console.log("Deleted comment: " + comment.id); + } + await octokit.issues.createComment({ + owner: OWNER, + repo: REPO, + issue_number: ISSUE_NUMBER, + body: ` +# Page Preview Images + +${images.join("\n")} + `, + }); +}); diff --git a/.github/gen-page-preview/package.json b/.github/gen-page-preview/package.json new file mode 100644 index 00000000..78d4af61 --- /dev/null +++ b/.github/gen-page-preview/package.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "@octokit/rest": "^18.12.0", + "@playwright/test": "^1.16.3", + "playwright": "^1.16.3", + "imgur-anonymous-uploader": "^1.1.2" + } +} \ No newline at end of file diff --git a/.github/gen-page-preview/playwright.config.ts b/.github/gen-page-preview/playwright.config.ts new file mode 100644 index 00000000..c5e0cc0a --- /dev/null +++ b/.github/gen-page-preview/playwright.config.ts @@ -0,0 +1,10 @@ +import { PlaywrightTestConfig } from "@playwright/test"; +const config: PlaywrightTestConfig = { + webServer: { + command: "yarn start", + cwd: process.env.GITHUB_WORKSPACE, + port: 3000, + }, + timeout: 0 +}; +export default config; diff --git a/.github/markdown-header-check/.gitignore b/.github/markdown-header-check/.gitignore new file mode 100644 index 00000000..0244fef5 --- /dev/null +++ b/.github/markdown-header-check/.gitignore @@ -0,0 +1,3 @@ +node_modules +yarn.lock +markdown-header.js \ No newline at end of file diff --git a/.github/markdown-header-check/markdown-header.ts b/.github/markdown-header-check/markdown-header.ts new file mode 100644 index 00000000..ee40f638 --- /dev/null +++ b/.github/markdown-header-check/markdown-header.ts @@ -0,0 +1,177 @@ +import axios from "axios"; +import * as crypto from "crypto"; +import * as fs from "fs"; +import * as matter from "gray-matter"; +import * as path from "path"; +import { exit } from "process"; + +interface FileDetails { + filePath: string; + fields: { + [key: string]: any; + }; + oldFile: string | null; + isChanged: boolean; +} + +function getGrayMatter(content: string): { + data: { + [key: string]: any; + }; +} { + // @ts-ignore + return matter(content); +} + +(async () => { + function getAllFiles(searchPath: string) { + const files = fs.readdirSync(searchPath); + const results: string[] = []; + + files.forEach((file) => { + const fullPath = path.normalize(searchPath + "/" + file); + const stat = fs.statSync(fullPath); + + if (stat.isDirectory()) { + results.push(...getAllFiles(fullPath)); + } else { + results.push(fullPath); + } + }); + return results; + } + + function getHeaderFields(filePath: string): { + [key: string]: any; + } { + const content = fs.readFileSync(filePath, "utf8"); + const { data } = getGrayMatter(content); + return data; + } + + async function getHTTPContent(url: string): Promise { + try { + const response = await axios.get(url); + if (response.status !== 200) { + return null; + } + return response.data; + } catch (error) { + console.warn(error); + return null; + } + } + + const files = getAllFiles(".") + .filter((x) => x.endsWith(".md")) + .filter((x) => !x.includes("node_modules")) + .filter((x) => !x.includes("README.md")); + + const requiredFields = { + blog: ["title", "category", "author", "createdAt", "updatedAt"], + other: ["title", "description", "createdAt", "updatedAt"], + }; + + async function forBlog( + fileDetails: FileDetails, + authors: [{ [key: string]: any }], + categories: [{ [key: string]: any }] + ) { + const file = fileDetails.filePath; + const oldFile = fileDetails.oldFile; + const fields = fileDetails.fields; + const isChanged = fileDetails.isChanged; + + // 執筆者の確認 + const author = fields["author"]; + if (authors.findIndex((x) => x.slug === author) === -1) { + console.warn(`${file}: 執筆者が正しくありません (${author})`); + return false; + } + + // カテゴリーの確認 + const category = fields["category"]; + if (categories.findIndex((x) => x.slug === category) === -1) { + console.warn(`${file}: カテゴリが正しくありません (${category})`); + return false; + } + + if (oldFile !== null && isChanged) { + const oldFields = getGrayMatter(oldFile).data; + if (oldFields["updatedAt"] == fields["updatedAt"]) { + console.warn( + `${file}: 更新日時が変更されていません (${fields["updatedAt"]})` + ); + return false; + } + } + + return true; + } + + async function forOther(fileDetails: FileDetails) { + const file = fileDetails.filePath; + const oldFile = fileDetails.oldFile; + const fields = fileDetails.fields; + const isChanged = fileDetails.isChanged; + + if (oldFile !== null && isChanged) { + const oldFields = getGrayMatter(oldFile).data; + if (oldFields["updatedAt"].toString() == fields["updatedAt"].toString()) { + console.warn( + `${file}: 更新日時が変更されていません (${fields["updatedAt"]})` + ); + return false; + } + } + return true; + } + + const authors = await getHTTPContent( + "https://raw.githubusercontent.com/jaoafa/jaoweb/master/content/blog/authors.json" + ); + const categories = await getHTTPContent( + "https://raw.githubusercontent.com/jaoafa/jaoweb/master/content/blog/categories.json" + ); + + let isValid = true; + // %f: %m + for (const file of files) { + const fields = getHeaderFields(file); + const fileType = file.includes("blog") ? "blog" : "other"; + const requiredFieldsForFile = requiredFields[fileType]; + for (const field of requiredFieldsForFile) { + if (!fields[field]) { + console.warn(`${file}: 必要なフィールド ${field} がありません。`); + isValid = false; + } + } + + const oldFile = await getHTTPContent( + `https://raw.githubusercontent.com/jaoafa/jaoweb-docs/main/${file.replace( + /\\/g, + "/" + )}` + ); + const content = fs.readFileSync(file, "utf8"); + + const fileDetails: FileDetails = { + filePath: file, + fields: fields, + oldFile: oldFile, + isChanged: + crypto.createHash("sha256").update(oldFile).digest("hex") != + crypto.createHash("sha256").update(content).digest("hex"), + }; + + if (fileType == "blog") { + const vaild = await forBlog(fileDetails, authors, categories); + if (!vaild) isValid = false; + } else { + const vaild = await forOther(fileDetails); + if (!vaild) isValid = false; + } + } + + process.exitCode = isValid ? 0 : 1; +})(); diff --git a/.github/markdown-header-check/package.json b/.github/markdown-header-check/package.json new file mode 100644 index 00000000..c01356d0 --- /dev/null +++ b/.github/markdown-header-check/package.json @@ -0,0 +1,8 @@ +{ + "devDependencies": { + "axios": "^0.24.0", + "gray-matter": "^4.0.3", + "typescript": "^4.4.4", + "@types/node": "^16.11.6" + } +} \ No newline at end of file diff --git a/.github/markdown-header-check/tsconfig.json b/.github/markdown-header-check/tsconfig.json new file mode 100644 index 00000000..b60c8937 --- /dev/null +++ b/.github/markdown-header-check/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "ESNext", + "moduleResolution": "Node", + "lib": ["ESNext", "ESNext.AsyncIterable", "DOM"], + "esModuleInterop": true, + "allowJs": true, + "sourceMap": true, + "strict": true, + "noEmit": true, + "experimentalDecorators": true, + "baseUrl": "." + }, + "exclude": ["node_modules"] +} diff --git a/.github/scripts/markdown-header.js b/.github/scripts/markdown-header.js deleted file mode 100644 index db8f2e1f..00000000 --- a/.github/scripts/markdown-header.js +++ /dev/null @@ -1,51 +0,0 @@ -"use strict"; -exports.__esModule = true; -var fs = require("fs"); -var matter = require("gray-matter"); -var path = require("path"); -var process_1 = require("process"); -var getAllFiles = function (searchPath) { - var files = fs.readdirSync(searchPath); - var results = []; - files.forEach(function (file) { - var fullPath = path.normalize(searchPath + '/' + file); - var stat = fs.statSync(fullPath); - if (stat.isDirectory()) { - results.push.apply(results, getAllFiles(fullPath)); - } - else { - results.push(fullPath); - } - }); - return results; -}; -var getHeaderFields = function (filePath) { - var content = fs.readFileSync(filePath, 'utf8'); - var data = matter(content).data; - return data; -}; -var files = getAllFiles('.') - .filter(function (x) { return x.endsWith('.md'); }) - .filter(function (x) { return !x.includes('node_modules'); }) - .filter(function (x) { return !x.includes('README.md'); }); -console.log(files); -var requiredFields = { - blog: ['title', 'category', 'author', 'createdAt', 'updatedAt'], - other: ['title', 'description', 'createdAt', 'updatedAt'] -}; -var isValid = true; -// %f: %m -for (var _i = 0, files_1 = files; _i < files_1.length; _i++) { - var file = files_1[_i]; - var fields = getHeaderFields(file); - var fileType = file.includes('blog') ? 'blog' : 'other'; - var requiredFieldsForFile = requiredFields[fileType]; - for (var _a = 0, requiredFieldsForFile_1 = requiredFieldsForFile; _a < requiredFieldsForFile_1.length; _a++) { - var field = requiredFieldsForFile_1[_a]; - if (!fields[field]) { - console.log(file + ": \u5FC5\u8981\u306A\u30D5\u30A3\u30FC\u30EB\u30C9 " + field + " \u304C\u3042\u308A\u307E\u305B\u3093\u3002"); - isValid = false; - } - } -} -(0, process_1.exit)(isValid ? 0 : 1); diff --git a/.github/scripts/markdown-header.ts b/.github/scripts/markdown-header.ts deleted file mode 100644 index f028a4b0..00000000 --- a/.github/scripts/markdown-header.ts +++ /dev/null @@ -1,52 +0,0 @@ -import * as fs from 'fs'; -import * as matter from 'gray-matter'; -import * as path from 'path'; -import { exit } from 'process'; - -const getAllFiles = (searchPath: string) => { - const files = fs.readdirSync(searchPath) - const results = [] - - files.forEach(file => { - const fullPath = path.normalize(searchPath + '/' + file) - const stat = fs.statSync(fullPath) - - if (stat.isDirectory()) { - results.push(...getAllFiles(fullPath)) - } else { - results.push(fullPath) - } - }) - return results -} -const getHeaderFields = (filePath: string) => { - const content = fs.readFileSync(filePath, 'utf8') - const { data } = matter(content) - return data -} - -const files = getAllFiles('.') - .filter(x => x.endsWith('.md')) - .filter(x => !x.includes('node_modules')) - .filter(x => !x.includes('README.md')) - -const requiredFields = { - blog: ['title', 'category', 'author', 'createdAt', 'updatedAt'], - other: ['title', 'description', 'createdAt', 'updatedAt'], -} - -let isValid = true -// %f: %m -for (const file of files) { - const fields = getHeaderFields(file) - const fileType = file.includes('blog') ? 'blog' : 'other' - const requiredFieldsForFile = requiredFields[fileType] - for (const field of requiredFieldsForFile) { - if (!fields[field]) { - console.log(`${file}: 必要なフィールド ${field} がありません。`) - isValid = false - } - } -} - -exit(isValid ? 0 : 1) diff --git a/.github/workflows/generate-page-preview-image.yml b/.github/workflows/generate-page-preview-image.yml new file mode 100644 index 00000000..668537d0 --- /dev/null +++ b/.github/workflows/generate-page-preview-image.yml @@ -0,0 +1,75 @@ +name: Generate page preview image + +on: pull_request_target + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - name: Clone jaoafa/jaoweb + uses: actions/checkout@v2 + with: + repository: jaoafa/jaoweb + + - name: Remove content + run: rm -rf content + + - name: Clone jaoafa/jaoweb-docs + uses: actions/checkout@v2 + with: + path: content + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + + - name: Download authors.json & categories.json + run: | + wget -O content/blog/authors.json https://raw.githubusercontent.com/jaoafa/jaoweb/master/content/blog/authors.json + wget -O content/blog/categories.json https://raw.githubusercontent.com/jaoafa/jaoweb/master/content/blog/categories.json + + - uses: actions/setup-node@v2 + with: + node-version: 14 + + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "::set-output name=dir::$(yarn cache dir)" + + - name: Cache node_modules + uses: actions/cache@v2 + id: yarn-cache + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: Install Japanese font + run: sudo apt install fonts-ipafont-gothic fonts-ipafont-mincho + + - name: Install dependencies + run: yarn + + - name: Nuxt build + run: yarn cross-env NUXT_TELEMETRY_DISABLED=1 nuxt build + + - name: Nuxt generate + run: yarn cross-env NUXT_TELEMETRY_DISABLED=1 nuxt generate + + - name: Check exists dist + run: | + ls -la + test -d dist + + - name: Install dependencies in gen-page-preview + working-directory: ./content/.github/gen-page-preview/ + run: yarn + + - name: Generate page screenshots + working-directory: ./content/.github/gen-page-preview/ + run: yarn playwright test --config=playwright.config.ts --browser=firefox main.spec.ts + env: + ISSUE_NUMBER: ${{ github.event.number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BASE_SHA: ${{ github.event.pull_request.base.sha }} + IMGUR_CLIENT_ID: ${{ secrets.IMGUR_CLIENT_ID }} diff --git a/.github/workflows/markdown-header-check.yml b/.github/workflows/markdown-header-check.yml index 0514bb4f..6ffc8356 100644 --- a/.github/workflows/markdown-header-check.yml +++ b/.github/workflows/markdown-header-check.yml @@ -8,6 +8,8 @@ jobs: steps: - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.sha }} - uses: actions/setup-node@v2 with: @@ -31,13 +33,16 @@ jobs: restore-keys: | ${{ runner.os }}-yarn- - - name: Install dependencies + - name: Install dependencies & Compile + working-directory: ./.github/markdown-header-check/ run: | - yarn add gray-matter typescript - yarn add --dev @types/node + ls -la + yarn + yarn add --dev gray-matter typescript axios @types/node + tsc markdown-header.ts - name: Run markdown-header run: | - node .github/scripts/markdown-header.js | reviewdog -efm="%f: %m" -name="markdown-header" -reporter=github-pr-review + node .github/markdown-header-check/markdown-header.js env: REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/markdown-lintcheck-request.yml b/.github/workflows/markdown-lintcheck-request.yml index 72f7d334..e97fe9d8 100644 --- a/.github/workflows/markdown-lintcheck-request.yml +++ b/.github/workflows/markdown-lintcheck-request.yml @@ -8,6 +8,8 @@ jobs: steps: - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.sha }} - name: Setup reviewdog uses: reviewdog/action-setup@v1.0.0 env: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..b034d653 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,119 @@ +name: Release + +on: + workflow_dispatch: + pull_request_target: + branches: + - main + types: + - closed + +jobs: + release: + runs-on: ubuntu-latest + if: github.event_name == 'workflow_dispatch' || github.event.pull_request.merged == true + + steps: + - name: Get current date + id: date + run: echo "::set-output name=datetime::$(date +'%Y%m%d-%H%M%S')" + + - name: Clone jaoafa/jaoweb + uses: actions/checkout@v2 + with: + repository: jaoafa/jaoweb + + - name: Remove content + run: rm -rf content + + - name: Clone jaoafa/jaoweb-docs + uses: actions/checkout@v2 + with: + path: content + + - name: Download authors.json & categories.json + run: | + wget -O content/blog/authors.json https://raw.githubusercontent.com/jaoafa/jaoweb/master/content/blog/authors.json + wget -O content/blog/categories.json https://raw.githubusercontent.com/jaoafa/jaoweb/master/content/blog/categories.json + + - uses: actions/setup-node@v2 + with: + node-version: 14 + + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "::set-output name=dir::$(yarn cache dir)" + + - name: Cache node_modules + uses: actions/cache@v2 + id: yarn-cache + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: Install dependencies + run: yarn + + - name: Nuxt build + run: yarn cross-env NUXT_TELEMETRY_DISABLED=1 nuxt build + + - name: Nuxt generate + run: yarn cross-env NUXT_TELEMETRY_DISABLED=1 nuxt generate + + - name: Check exists dist + run: | + ls -la + test -d dist + + - name: Set jaoweb SHORT_SHA + id: jaoweb-vars + run: | + echo "::set-output name=SHORT_SHA::$(git rev-parse --short HEAD)" + + - name: Set jaoweb-docs SHORT_SHA + id: docs-vars + working-directory: ./content + run: echo "::set-output name=SHORT_SHA::$(git rev-parse --short HEAD)" + + - name: Create dist.tgz + working-directory: ./dist + run: tar -cvf ../dist.tgz $(ls -A) + + - name: Create a Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: v${{ steps.date.outputs.datetime }} + release_name: Release v${{ steps.date.outputs.datetime }} + draft: false + prerelease: true + body: | + ${{ github.event.pull_request.body }} + + jaoweb sha: [${{ steps.jaoweb-vars.outputs.SHORT_SHA }}](https://github.com/jaoafa/jaoweb/commit/${{ steps.jaoweb-vars.outputs.SHORT_SHA }}) + jaoweb-docs sha: ${{ steps.docs-vars.outputs.SHORT_SHA }} + + - name: Upload Release Asset + uses: actions/upload-release-asset@v1.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: dist.tgz + asset_name: dist.tgz + asset_content_type: application/zip + + - name: Released comment + uses: actions/github-script@v4 + with: + script: | + github.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: `# リリースが完了しました\n\n${{ steps.create_release.outputs.html_url }}` + }) diff --git a/blog/202112-server-stop.md b/blog/202112-server-stop.md new file mode 100644 index 00000000..d6921520 --- /dev/null +++ b/blog/202112-server-stop.md @@ -0,0 +1,29 @@ +--- +title: Minecraftサーバ停止のお知らせ +category: news +author: tomachi +createdAt: 2021-12-11 +updatedAt: 2021-12-13 +--- + +jao Minecraft Server では、Minecraft サーバのサービス提供を一時停止することとなりました。 +利用者の皆様にはご迷惑をおかけいたしますが、ご承知おきください。 + +## サービスの提供を一時停止する経緯 + +先日、 Minecraft でも使用されている Java のロギングライブラリ「log4j2」に関する重大な脆弱性([CVE-2021-44228](https://github.com/advisories/GHSA-jfh8-c2jp-5v3q))が報告されました。 +この脆弱性は Minecraft サーバだけでなく、みなさんが使用している Minecraft クライアントについても対象となります。 +運営で協議した結果、利用者の皆様の安全を確保するためにも、一時的にサービスの停止を実施することを決定いたしました。 + +## 具体的な対応について + +- 2021年12月9日 10時58分より安全性が確認されるまでの間、Minecraft サーバにおけるサービス提供を一時停止いたします。この間、Minecraft サーバにログインすることはできません。 +- Minecraft サーバが停止している間、各種投票サイトにおける投票は行えません。また今回の事案に関して、投票の補填は行いません。 +- jao Minecraft Server の公式 Web サイト、および公式 Discord サーバに関しては通常通りご利用いただけます。 +- Minecraft アカウントと公式 Discord サーバにおける[連携の自動切断](https://jaoafa.com/server/rules/discord/#免責事項)について、ログイン期限を一律で2022年1月31日 23時59分59秒まで延長しました。 + +## 参考記事 + +- [LunaSec による記事(英語)](https://www.lunasec.io/docs/blog/log4j-zero-day/) +- [ITmedia による記事](https://www.itmedia.co.jp/news/articles/2112/10/news157.html) +- [窓の杜による記事](https://forest.watch.impress.co.jp/docs/serial/yajiuma/1373242.html) diff --git a/blog/202202-server-restart.md b/blog/202202-server-restart.md new file mode 100644 index 00000000..f9746208 --- /dev/null +++ b/blog/202202-server-restart.md @@ -0,0 +1,18 @@ +--- +title: Minecraftサーバサービス再開のお知らせ +category: news +author: hiratake +createdAt: 2022-02-19 +updatedAt: 2022-02-19 +--- + +昨年12月より、[当サーバのMinecraftサーバのサービス提供を停止](/blog/202112-server-stop)しておりましたが、本日よりサービス提供を再開いたします。 + +サービス提供の再開にあたり、以下の対応を行いました。 + +- Minecraftバージョンを `1.16.5` から `1.18.1` へアップデート +- Minecraftサーバのスポーン地域名を「爆新地」から「中央市」へ変更 + +Minecraftサーバ内の自治体範囲につきましては、申請がない限り変更はございません。 + +今後とも「jao Minecraft Server」をよろしくおねがいいたします。 diff --git a/blog/forge-commentary.md b/blog/forge-commentary.md index a80c2835..fbebb6d7 100644 --- a/blog/forge-commentary.md +++ b/blog/forge-commentary.md @@ -1,15 +1,17 @@ --- -title: Forgeの導入解説【1.16.5版】 -description: 様々なModの前提Modとなる「Minecraft Forge」の導入方法を1.16.5環境で解説します。 +title: Forgeの導入解説 +description: 様々なModの前提Modとなる「Minecraft Forge」の導入方法を解説します。 category: modification author: ekipa image: https://storage.jaoafa.com/5aa42e5d871f5287311d4fe055c003d1.png createdAt: 2021-05-03 -updatedAt: 2021-05-03 +updatedAt: 2022-03-13 --- この記事では、様々なModの前提Modとなる「**Minecraft Forge**」の導入方法などを解説します。 +バージョン1.16.5環境での解説になりますが、基本的にどのバージョンでもダウンロードの手順は変わりませんので、適宜読み替えてご覧ください。 + ## 解説環境 - Windows 10 diff --git a/blog/how-to-microsoft-minecraft-launcher-installations-migration.md b/blog/how-to-microsoft-minecraft-launcher-installations-migration.md new file mode 100644 index 00000000..e14dd791 --- /dev/null +++ b/blog/how-to-microsoft-minecraft-launcher-installations-migration.md @@ -0,0 +1,50 @@ +--- +title: Windowsアプリ版Minecraft Launcherにプロファイルを移行する方法 +category: tips +author: kohonayoshi +createdAt: 2021-11-07 +updatedAt: 2021-11-07 +--- + +先日、 Minecraft Launcher の [Microsoft Store での配信](https://www.xbox.com/ja-JP/games/store/Minecraft-Launcher/9PGW18NPBZV5) が開始されました。この新しいランチャーでは、「Java Edition」「Bedrock Edition」の両方が利用可能になります。 + +これまで Minecraft を遊んでこられた方は、今までのランチャーから切り替えを行うことになります。その際に、これまで遊んでいたデータなどを新しいランチャーへ移行したい!という方が多いのではないかと思います。 + +この記事では、新しい Minecraft Launcher へプロファイルを移行する方法について解説します。 +※一応自分が動作確認して問題はありませんでしたが、ご自身の責任のもと実行してください。 + +## 移行方法 + +### 1. `.minecraft` フォルダを開く + +`%appdata%\.minecraft` をエクスプローラーのアドレス欄に入力し、アクセスすると Minecraft のフォルダが開けます。 + +### 2. `launcher_profiles.json`(旧ランチャー) と `launcher_profiles_microsoft_store.json`(新ランチャー) を開く + +`.minecraft` フォルダにある `launcher_profiles.json` と、`launcher_profiles_microsoft_store.json` の両方を適当なエディタで開きます。 + +### 3. 以下のうち👈の絵文字で囲まれた範囲を、旧ランチャーからコピーし新ランチャーの該当する部分に貼り付けて置き換える + +```json + + "launcherVersion": { + "1a1b*******************1968": { + "format": 21, + "name": "", + "profilesFormat": 2 + }, + "profiles": { 👈ここから + +︙ + + "lastVersionId": "1.14.4-forge-28.2.0", + "name": "Forge_1.14.4", + "type": "custom" + } 👈ここまで + }, + "selectedUser": { +``` + +### 4. 新ランチャーを起動してプロファイルがある・正常に起動できることを確認する + +新しいMicrosoft Store版のランチャーを起動し、プロファイルが反映されていることとそのプロファイルで起動できることを確認してください。 diff --git a/blog/how-to-vote.md b/blog/how-to-vote.md index 543c5d77..6f0ee1b5 100644 --- a/blog/how-to-vote.md +++ b/blog/how-to-vote.md @@ -35,7 +35,7 @@ Japan Minecraft Serversで投票するには、アカウントを作成する必 次に、「認証コード」「メールアドレス」「パスワード」を入力します。 「認証コード」は、Minecraftで専用のサーバへ入って取得する必要があります。Minecraftを起動後、「マルチプレイ」をクリックし、「ダイレクト接続」から `code.minecraft.jp` へ参加することで取得できます。 -サーバのバージョンが `1.6.2-1.8.0` となっていますが、`1.12.2` や `1.16.5` など異なるバージョンでも認証コードは取得できます。 +サーバのバージョンが `1.6.2-1.8.0` となっていますが、`1.12.2` や `1.18.5` など異なるバージョンでも認証コードは取得できます。 「パスワード」は、他のサービスで使用しているパスワードを使いまわさないようにしましょう。 diff --git a/blog/worldedit-commentary.md b/blog/worldedit-commentary.md index e12ec224..2009c19d 100644 --- a/blog/worldedit-commentary.md +++ b/blog/worldedit-commentary.md @@ -4,7 +4,7 @@ category: modification author: ekipa image: https://storage.jaoafa.com/769015da82c26c08e1835fa1e9bb04fb.png createdAt: 2020-11-23 -updatedAt: 2021-01-03 +updatedAt: 2022-03-13 --- この記事では、建築をサポートするプラグイン「**WorldEdit**」の解説をします。 @@ -16,10 +16,10 @@ updatedAt: 2021-01-03 ## 解説環境 -- Paper 1.16.5 -- WorldEdit 1.16-638;b96cea7 +- Paper 1.18.2 +- FastAsyncWorldEdit 2.1.1-SNAPSHOT-124;7ba185c -## 基本 +## 基本操作 WorldEditは、基本的に「**木の斧で範囲選択 + コマンド実行**」で使用します。 @@ -53,7 +53,7 @@ WorldEditのコマンドは、基本的に「**//**」(スラッシュ2本)か - ブロック名の部分には「`stone`」などを指定してください。「`hand`」を指定すると手に持ってるアイテムを設置します。 -ブロックID(例: `1`は`stone`)は1.13で廃止されましたが、1.12以前のブロックであればブロックIDでブロックを指定することができます。 +ブロックID (例: `1`は`stone`)はバージョン1.13で廃止されましたが、バージョン1.12以前のブロックであればブロックIDでブロックを指定することができます。 #### //move [数] <方向> @@ -185,8 +185,8 @@ WorldEditのコマンド実行前の状態に巻き戻します。巻き戻す ## 使用する上での注意点 -WorldEditは、可能性を広げてくれる一方で、一歩間違えると[大変なこと](https://wiki.jaoafa.com/%E6%9E%A1%E9%A7%86%E7%81%BD%E5%AE%B3)になってしまうことがあります。 -使用する前に**よく使い方を調べたり**、**大規模な編集を一度に行わず、分割して作業する**などサーバへの負荷をなるべく小さくするようにしてください。(明確な規定はありませんが、常識的範囲で) +WorldEditは、建築の可能性を広げてくれる一方で、一歩間違えると[大変なこと](https://wiki.jaoafa.com/%E6%9E%A1%E9%A7%86%E7%81%BD%E5%AE%B3)になってしまうことがあります。 +使用する前に**よく使い方を調べたり**、**大規模な編集を一度に行わず、分割して作業する**などサーバへの負荷をなるべく小さくするようにしてください。(明確な規定はありませんが、常識的な範囲内で) ## 選択範囲可視化について @@ -195,6 +195,8 @@ WorldEditは、可能性を広げてくれる一方で、一歩間違えると[ ![WorldEditの範囲指定(ポリゴン選択式)](https://storage.jaoafa.com/834faf45b98fdb6178ca9d357a557b99.jpg) -## 解説記事 +### 解説記事 - [WorldEditCUIの導入解説](/blog/worldeditcui-commentary) + +※2022年3月現在、バージョン1.18には対応しておらず、1.16.5までのバージョンで利用することができるようです。 diff --git a/blog/worldeditcui-commentary.md b/blog/worldeditcui-commentary.md index d83def1b..8ea50985 100644 --- a/blog/worldeditcui-commentary.md +++ b/blog/worldeditcui-commentary.md @@ -1,10 +1,10 @@ --- -title: WorldEditCUIの導入解説【1.16.5・Forge版】 +title: WorldEditCUIの導入解説【Forge版】 description: WorldEditの選択範囲を可視化できる「WorldEditCUI」の導入方法と、簡単な使用方法を解説します。 category: modification author: ekipa createdAt: 2018-05-02 -updatedAt: 2021-04-21 +updatedAt: 2022-03-13 --- ## WorldEditCUIとは? @@ -15,6 +15,11 @@ updatedAt: 2021-04-21 jao Minecraft Server では、Modを導入していない方でも選択範囲が表示されるように設定されていますが、一定のブロック数を超えると表示されなくなったりします。なので、Modの導入をおすすめしています。 +2022年3月13日現在、WorldEditCUIはバージョン1.16.5までにのみ対応しており、1.18などでは利用することはできません。 +※WorldEditCUIの開発ページ (GitHub)にバージョン1.18.1の開発版があるようです。あくまでも開発版なので、使うのであれば**自己責任で**使って下さい。Forge版ではなく**Fabric版**のようです。 + +- [WorldEditCUIの開発版](https://github.com/EngineHub/WorldEditCUI/releases/tag/1.18.1%2B01) + ## 解説環境 - Windows10 diff --git a/blog/worldguard-commentary.md b/blog/worldguard-commentary.md index 6a3f40b3..cb7831d7 100644 --- a/blog/worldguard-commentary.md +++ b/blog/worldguard-commentary.md @@ -4,8 +4,8 @@ description: 建物を保護したり、細く設定をいじれる「WorldGuard category: modification author: tomachi image: https://storage.jaoafa.com/7c4f32739133a00d22e277db615250b1.png -createdAt: 2018-10-9 -updatedAt: 2021-01-03 +createdAt: 2018-10-09 +updatedAt: 2022-03-13 --- この記事では、建築物を保護したり、その範囲に入ったときにメッセージを表示したりするプラグイン、「**WorldGuard**」の解説をします。 @@ -25,13 +25,13 @@ updatedAt: 2021-01-03 ## 解説環境 -- Spigot(Bukkit) 1.12.2 -- WorldGuard 6.2.1;84bc322 +- Paper 1.18.2 +- WorldGuard 7.0.7 216b061 ## 対象読者・事前習得が必要なもの -- WorldEditを用いて簡単・複雑な範囲選択ができること(保護範囲の指定ができること) -- WorldEditの範囲選択権限があること(当サーバであれば[Verified権限](/server/policies/permissions)以上) +- WorldEditを用いて簡単・複雑な範囲選択ができること (保護範囲の指定ができること) +- WorldEditの範囲選択権限があること (当サーバであれば[Verified権限](/server/policies/permissions)以上) ## 必ず覚えておくべきコマンド @@ -50,7 +50,7 @@ defineの場合は保護数とブロック数制限がないみたいです。 3. 範囲をきちんと指定したことを確認して、コマンド「`/rg claim <保護名>`」と入力し、実行しましょう。保護名に日本語を指定することは出来ません。 4. 「`A new region has been claimed named '保護名'.`」(黄色)と表示されれば成功です。 -なお、爆新地(スポーン周辺の自由建築エリア)で保護を新規に登録する場合は、「`/bakushinchi claim <保護名>`」をご利用ください。メンバーやフラグ等の設定は通常の「`/rg`」コマンドを用いて設定することができます。 +なお、中央市(スポーン周辺の自由建築エリア)で保護を新規に登録する場合は、「`/chuocity claim <保護名>`」をご利用ください。メンバーやフラグ等の設定は通常の「`/rg`」コマンドを用いて設定することができます。 #### エラー概要 @@ -69,9 +69,9 @@ defineの場合は保護数とブロック数制限がないみたいです。 ### いまいる場所の保護情報を確認する -![保護範囲情報の例](https://storage.jaoafa.com/985fab5ddb9552c019ec92dfd40e55f4.PNG) +![保護範囲情報の例](https://storage.jaoafa.com/0aae27ad26c4c135c5d53692648ff884.PNG) -保護の範囲に居て、その保護の情報を確認したい場合は「`/rg info`」コマンドを使用しましょう。「`info`」以外にも「`i (/rg i)`」でも同様の機能を利用できます。 +保護の範囲に居て、その保護の情報を確認したい場合は「`/rg info`」コマンドを使用しましょう。「`info`」以外にも「`i` (`/rg i`)」でも同様の機能を利用できます。 自分が保護内にいなくても「`/rg info <保護名>`」で情報を表示することが出来ます。 表示された「`Region Info`」の内容がその保護の情報です。 @@ -103,12 +103,12 @@ WorldEditで広げたあとの保護範囲を選択し、`/rg redefine <保護 フラグの一覧や、フラグについての解説は別記事で行っております。 -- [WorldGuardのフラグ一覧](https://jaoafa.com/blog/minhero_exp/worldguard_flag-list) +- [WorldGuardのフラグ一覧](https://wiki.jaoafa.com/WorldGuard%E3%81%AE%E3%83%95%E3%83%A9%E3%82%B0%E4%B8%80%E8%A6%A7) ### 保護にメンバーを追加する 基本的に、claimで保護を設定した場合、設定者以外はその中で建築等ができなくなります。 -複数人で建築をする場合などは「`/rg addmember <保護名> `」と実行して保護にメンバーを追加してください。「`addmember`」以外にも「`rm`」などでも同等の機能を利用できます。 +複数人で建築をする場合などは「`/rg addmember <保護名> `」と実行して保護にメンバーを追加してください。「`addmember`」以外にも「`am`」などでも同等の機能を利用できます。 「`Region '<保護名>' updated with new members.`」(黄色)と表示されれば、追加は成功です。 ``に複数のプレイヤーを指定することもできます。例: `/rg addmember <保護名> X4Z mine_book000 Hirotaisou2012` diff --git a/server/beginners.md b/server/beginners.md index 0659a38d..7af7a82f 100644 --- a/server/beginners.md +++ b/server/beginners.md @@ -36,15 +36,16 @@ updatedAt: 2021-09-27 ## サーバに入ってみる -ログインできるのは**Minecraft Java Edition(PC版)**の**Ver.1.9.x ~ 1.16.x**です。 -サーバ自体のバージョンは**1.16.5**ですのでこちらのバージョンでのログインをおすすめします。 +ログインできるのは**Minecraft Java Edition(PC版)**の**Ver.1.9.x ~ 1.18.2**です。 +サーバ自体のバージョンは**1.18.2**ですのでこちらのバージョンでのログインをおすすめします。 ## 建築について -初期スポーン地点である"鯖庁"周辺の**芝生エリアで建築**することができます。 -以下の画像で「建築エリア」となっている場所以外の、鯖庁や道路上では建築することができません。 +最初にスポーンする「中央市 (ちゅうおうし)」と呼ばれる町で建築することができます。 +鯖庁と呼ばれるスポーンの施設には建築することができませんのでご注意ください。 -![爆新地の建築エリア図](https://storage.jaoafa.com/63c8bfe2e680ffcb39cc5041ffc27951.png) +また、中央市の外は許可制の土地(自治体)となっています。詳細は [こちら](/server/guidelines/cities) をご覧ください。 +![中央市のエリア図](https://storage.jaoafa.com/1c8be9b479ecfaa8e68e56f4e294dd5d.png) ### 自治体・観光について diff --git a/server/guidelines/broadcasts.md b/server/guidelines/broadcasts.md index 49b47359..63867244 100644 --- a/server/guidelines/broadcasts.md +++ b/server/guidelines/broadcasts.md @@ -1,5 +1,6 @@ --- title: 撮影・動画配信に関するガイドライン +description: jao Minecraft Serverと、関連するサービスにおいての「撮影・動画配信」について、運営側の方針と利用者のガイドラインを定義します。 image: https://storage.jaoafa.com/07602493134c9bf0a102c34304de2494.png createdAt: 2019-12-12 updatedAt: 2021-09-27 diff --git a/server/guidelines/cities.md b/server/guidelines/cities.md index 99adb533..dd988487 100644 --- a/server/guidelines/cities.md +++ b/server/guidelines/cities.md @@ -10,7 +10,7 @@ updatedAt: 2021-10-01 ## 自治体とは? -当サーバでは、運営が規定する「自由建築可能区域」(爆新地)の外に、運営からの許可を得て自身の「**自治体**」を作成することができます。 +当サーバでは、運営が規定する「自由建築可能区域」(中央市)の外に、運営からの許可を得て自身の「**自治体**」を作成することができます。 自身の自治体は、「自由建築可能区域」とは違い、その自治体の管理者と、その自治体が許可したプレイヤーのみが自由に編集することができます。 少々事務的で面倒かもしれませんが、最初の新規登録だけ終わればあとは自由です。ぜひ自由を掴み取ってください!w diff --git a/server/guidelines/index.md b/server/guidelines/index.md index 983f5099..12289dd4 100644 --- a/server/guidelines/index.md +++ b/server/guidelines/index.md @@ -2,13 +2,13 @@ title: ガイドライン description: jao Minecraft Serverで定める「ガイドライン」の解説を一覧を記載します。 createdAt: 2021-04-14 -updatedAt: 2021-09-07 +updatedAt: 2021-12-04 --- -jao Minecraft Server(以下「当サーバ」と呼びます)の各サービスをご利用いただく際に、「[サーバルール](/server/rules)」とあわせて適用されるルールとしてガイドラインを定めております。 +jao Minecraft Server(以下「当サーバ」と呼びます)では、各サービスをご利用いただく際に「[サーバルール](/server/rules)」とあわせて適用されるルールとして、ガイドラインを定めております。 ガイドラインでは、他の利用者とのトラブルを未然に防ぎ楽しい交流ができるよう、サーバルールの内容について具体例や図を交えながら詳細に説明しております。 -より具体的な内容に関しては「[よくあるご質問](/support/faq)」をご確認いただくか、[お問い合わせ](/support/inquiry)ください。 +ガイドラインにおいてご不明な点がある場合は、「[よくあるご質問](/support/faq)」をご確認いただくか運営まで[お問い合わせ](/support/inquiry)ください。 - [鉄道・道路敷設に関するガイドライン](/server/guidelines/railways) - [自治体に関するガイドライン](/server/guidelines/cities) diff --git a/server/guidelines/railways.md b/server/guidelines/railways.md index 526939c1..f7d47029 100644 --- a/server/guidelines/railways.md +++ b/server/guidelines/railways.md @@ -3,7 +3,7 @@ title: 鉄道・道路敷設に関するガイドライン description: Minecraftサーバ内における「鉄道」「道路」について、運営側の方針と鉄道・道路管理者のガイドラインを定義します。 image: https://storage.jaoafa.com/41121061c11a6f3f995f652257581cf1.png createdAt: 2018-07-13 -updatedAt: 2021-10-28 +updatedAt: 2022-03-12 --- このページではMinecraftサーバ内における「鉄道」「道路」について、運営側の方針と鉄道・道路管理者に向けたガイドラインを定義します。 @@ -14,30 +14,16 @@ updatedAt: 2021-10-28 - 鉄道・道路を作成できるのはVerified権限からです。 - すべての作業(新設・延伸・撤去など)において、周辺の自治体への相談・合意が必要です。 (ただし、自身の自治体内で完結するものについては必要ありません) -- 鉄道・道路を敷設できるのは、爆新地を除いた自治体の範囲内のみです。 +- 鉄道・道路を敷設できるのは、中央市を除いた自治体の範囲内のみです。 - 鉄道・道路の作成に、**運営の許可は必要ありません**。 -## 運営が管理する鉄道について - -運営は、爆新地の外周道路上に高架の鉄道を敷設しています。(以下、「爆新環状線」と呼びます) -また、この爆新環状線上には4つの駅を設置し、各駅から各方角のワールド端に向けて鉄道(爆新東/西/南/北線)を敷設しています。(以下、「4線」と呼びます) -これらの路線に接続する際のルールなどを記載します。 - -- 爆新環状線上の各駅に、運営が設置した4線以外の路線をつなぐことはできません。 -- 4線上に駅を建設する場合は、**一定の駅間距離を確保**してください。 - (確保できない場合は、新たに駅を建設するのではなく、近くの駅に接続してください。) -- 上記の理由により、4駅上に駅を建設する場合、他のユーザが敷設した路線の乗り入れを許可する必要があります。 - また、乗り入れる際の拡張を行えるような構造の駅を作る必要があります。 - ## やってはならない行為 処罰対象になる恐れがありますので、ご注意ください。 -- 爆新地内への鉄道の新規敷設 +- 中央市内への鉄道の新規敷設 (線路の設置時に警告が表示されますが、小規模な装飾目的であれば可能とします。) -- 4線の分岐 - (4線上に駅を制作して、必ず乗り継ぎを必要とする形での制作をお願いします。) -- 周辺の自治体所有者と相談しない状態での鉄道敷設 +- 周辺の自治体所有者と相談しない状態での鉄道・道路の敷設 (自治体所有者と連絡が付かない、まだサーバに入って日が浅く相談に抵抗があるといった場合は、当人と連絡できそうな他のユーザーに仲介してもらうと良いかもしれません。) 鉄道関係で領土侵犯等の迷惑行為が行われた場合には、**運営に報告をすることが可能です**。 diff --git a/server/policies/bans.md b/server/policies/bans.md index 09264ca1..465f3680 100644 --- a/server/policies/bans.md +++ b/server/policies/bans.md @@ -40,8 +40,6 @@ updatedAt: 2021-09-27 - EdenBan (EBan) - ChatBan - VanillaBan (VBan) -- LocalBan (LBan) -- GlobalBan (GBan) ### jMS Jail (Jail) @@ -73,7 +71,6 @@ jao Minecraft Server MyMaid4プラグイン - Minecraftサーバ内コマンド実行は不可能です。 - 公式Discordサーバの利用は可能です。 - ユーザーページに表示されます。 -- MCBansに表示されません。 - 他サーバに影響しません。 #### 処罰の変更・取消申請方法 @@ -94,7 +91,7 @@ jao Minecraft Server MyMaid4プラグイン 以下の用途で実施されます。 -- GBanの前段階として暫定的に行われる処罰 +- VBanの前段階として暫定的に行われる処罰 - モデレーターが管理部の判断を仰ぐ際に一時的に行う処罰 - jao Minecraft Serverの独自ルールへの違反が見られた場合 @@ -119,7 +116,6 @@ jao Minecraft Server MyMaid4プラグイン - Minecraftサーバ内コマンド実行は不可能です。 - 公式Discordサーバの利用は可能です。 - ユーザーページに表示されます。 -- MCBansに表示されません。 - 他サーバに影響しません。 #### 処罰の変更・取消申請方法 @@ -156,7 +152,6 @@ jao Minecraft Server MyMaid4プラグイン - Minecraftサーバ内コマンド実行は可能です。 - 公式Discordサーバの利用は可能です。 - ユーザーページに表示されます。 -- MCBansに表示されません。 - 他サーバに影響しません。 #### 処罰の変更・取消申請方法 @@ -171,7 +166,6 @@ Minecraftの元々唯一のBan機能であるローカルBanのことを指し 以下の用途で実施されます。 -- GBan・LBanを実行するほどの迷惑行為ではない場合 - 当サーバの独自ルール等への違反が見られた場合 #### 処罰実施・取消可能者 @@ -191,88 +185,8 @@ Minecraft バニラ - 対象利用者によるブロック設置破壊はロールバックされます。 - 公式Discordサーバの利用は不可能です。 - ユーザーページに表示されます。 -- MCBansに表示されません。 - 他サーバに影響しません。 #### 処罰の変更・取消申請方法 [公式Discordサーバ](/blog/join-discord)の`#support`チャンネルでのみ受け付けます。 - -### MCBans Local Ban (LBan) - -MCBansプラグインが提供するローカル的なBanです。 - -#### 処罰条件 - -以下の用途で実施されます。 - -- GBanを実行するほどの迷惑行為ではない場合 -- jao Minecraft Serverの独自ルール等への違反が見られた場合 - -#### 処罰実施・取消可能者 - -この処罰を実施できるのは、以下の権限グループに所属する利用者のみです。 - -- Moderator -- Admin - -#### 処罰発行元 - -MCBansプラグイン - -#### 違反者にかかる規制 - -- Minecraftサーバへのログインは不可能です。 -- 対象利用者によるブロック設置破壊はロールバックされます。 -- Minecraftサーバ内チャットは不可能です。 -- 公式Discordサーバの利用は不可能です。 -- ユーザーページに表示されます。 -- MCBansに表示されます。 -- 他サーバに影響しません。 - -#### 処罰の変更・取消申請方法 - -[公式Discordサーバ](/blog/join-discord)の`#support`チャンネルでのみ受け付けます。 - -### MCBans Global Ban (GBan) - -MCBansプラグインが提供するグローバル的なBanです。 - -#### 処罰条件 - -以下の用途で実施されます。 - -- jao Minecraft Serverの[サーバルール](/server/rules)に違反し、かつ[Global Ban Rules](https://forums.mcbans.com/wiki/global-ban-rules/)や[MCBans Terms of Service](https://www.mcbans.com/tos)に違反する場合 - -#### 処罰実施・取消可能者 - -この処罰を実施できるのは、以下の権限グループに所属する利用者のみです。 - -- Moderator -- Admin - -#### 処罰発行元 - -MCBansプラグイン - -#### 違反者にかかる規制 - -- Minecraftサーバへのログインは不可能です。 -- 対象利用者によるブロック設置破壊はロールバックされます。 -- 公式Discordサーバの利用は不可能です。 -- ユーザーページに表示されます。 -- MCBansに表示されます。 -- 他サーバに影響します。 - -#### 処罰の変更・取消申請方法 - -処罰から90日間の間は、[MCBans](https://www.mcbans.com/)を通して異議を申し立てて頂く必要があります。 -その後は[公式Discordサーバ](/blog/join-discord)の`#support`チャンネルで受け付けます。 - -### 上記以外の各種禁止処置 - -上記以外に、以下の対応がとられる場合もあります。 - -- 特定ブロックの設置・破壊権限の剥奪 -- 設置・破壊したブロックの全ロールバック(元に戻すこと) -- コマンドの実行権限の剥奪 diff --git a/server/profiles.md b/server/profiles.md index b413cdc6..0c5841f6 100644 --- a/server/profiles.md +++ b/server/profiles.md @@ -30,7 +30,6 @@ Adminを補佐する役割を担います。 |スキン|名前|MinecraftID|TwitterID|DiscordID|役割| |:-|:-|:-|:-|:-|:-| |![kohonayoshi](https://storage.jaoafa.com/d3c6d204dd7fea3d5efb77d4dc848e8b.png)|Kohona|kohonayoshi|[@kohona_poke](https://twitter.com/kohona_poke)|[kohonayoshi#0153](https://discord.com/users/315726390844719114)|鯖落とし・
開発の補助・交通系管理の補助| -|![Nudonge](https://storage.jaoafa.com/b8aa91cacea4b4de0355cb5f7eec9e8a.png)|Nudonge|Nudonge|[@NudongeBritain](https://twitter.com/NudongeBritain)|[Nudonge#9980](https://discord.com/users/290787709721509890)|爆新地の見回り・
コミュニティ管理・荒らし対応| |![MinHero_exp](https://storage.jaoafa.com/fb68e673c41ce79f66bd5b930f8be5d5.png)|EKipa|MinHero_exp|[@minhero_exp](https://twitter.com/minhero_exp)|[minhero_exp#3751](https://discord.com/users/310570792691826688)|爆新地の見回り・
コミュニティ管理・荒らし対応・Webサイト編集| |![Ekusas83](https://storage.jaoafa.com/b7e612706c25b7bb967dc6faa7ab63ce.png)|Ekusas|Ekusas83|[@ekusas55000](https://twitter.com/ekusas55000)|[ekusas#8352](https://discord.com/users/189377054955798528)|コミュニティ管理・開発補助| |![X5Z](https://storage.jaoafa.com/56f1b4514b6bcf5e98a58a18c2d2c27e.png)|Zozokasu|X5Z|[@Zozokasu](https://twitter.com/Zozokasu)|[Zokasu#8216](https://discord.com/users/189372008147058688)|コミュニティ管理・開発補助| diff --git a/server/rules/discord.md b/server/rules/discord.md index 4b21211b..1242bf7f 100644 --- a/server/rules/discord.md +++ b/server/rules/discord.md @@ -3,7 +3,7 @@ title: Discordサーバルール description: jao Minecraft Serverの公式Discordサーバ「jMS Gamers Club」のルール・方針を記載します。 image: https://storage.jaoafa.com/a47ae3b97382ac13d31cf37c690debb7.png createdAt: 2019-12-31 -updatedAt: 2021-09−27 +updatedAt: 2021-11-03 --- このページでは、jao Minecraft Serverの公式Discordサーバである「jMS Gamers Club」(以下、「公式Discordサーバ」と呼びます)におけるルール・方針について記載します。 @@ -62,24 +62,28 @@ updatedAt: 2021-09−27 2. 役職グループ「MinecraftConnected」・「SubAccount」の両方が付与されておらず、「NeedSupport」が付与されている状態で参加から3週間(21日間)が経過した場合 (3weeksチェックと呼びます) 3. 参加後、10分以内に所定の挨拶(チャット)が利用者から行われない場合 5. 利用者のMinecraftサーバへの最終ログインから3ヶ月(90日間)が経過した場合、自動的に**Minecraftアカウントとの連携が解除**されます。 (3monthsチェックと呼びます) -6. 利用者は、運営が適切と判断できる理由がある場合公式Discordサーバの`#support`チャンネルにて免責事項の4の自動連携解除を期限付きで延期申請することができます。 +6. 特段の事情がありサーバにログインできない場合、利用者は免責事項の4の自動連携解除を期限付きで延期申請することができます。申請理由などをもとに、運営は期限延長の可否を判断します。 7. その他運営の判断により、利用者をキックやBanすることがあります。ただしこの際は対応可否や正当性について、運営内で審議を行った後に実行されます。 +8. 3か月経過によって自動的にMinecraftアカウントとの連携が解除された場合、次の方法で権限を復元することができます。 + 1. 連携自動解除後、1週間以内に再連携した場合は自動的に権限が復元されます。 + 2. 連携自動解除後、1か月(30日)以内であれば本人から公式Discordサーバの `#support` チャンネルにて、権限の再付与申請を行うことができます。運営は申請内容について、再付与の可否を判断します。 +9. 運営(Admin・Moderator)についても、連携自動解除後1か月以内に再接続しない場合はAdmin・Moderatorからの脱退を求めます。 ## サブアカウントについて 公式Discordサーバでは、Discordサブアカウントの所有・サブアカウントによる参加を**容認しております**。 しかし、サブアカウントに対しては以下の条件・制限が課されますのでご注意ください。 -- サブアカウントには、`/link`によってMinecraftアカウントとの連携が行われている**メインアカウントが必要**です。 +- サブアカウントには、`/link` によってMinecraftアカウントとの連携が行われている**メインアカウントが必要**です。 - システム上、ひとつのMinecraftアカウントにつきひとつのDiscordアカウントとしか連携できません。そのためサブアカウントについては、Discordサーバへの参加から1ヶ月後に自動キックされてしまいます。これを避けるために、運営からの次のサブアカウント認証を受ける必要があります。 - - 公式Discordサーバ`#support`にて、サブアカウントであることをサブアカウントのDiscordTag(例: `tomachi#0310`)を記述した上で**メインアカウントから申請し**、承認される。 -- サブアカウント認証が行われても、メインアカウントと同等の権限は与えられません。そのため、一部のチャンネル(`#server-chat`や`#freechat`など)は閲覧できません。 + - 公式Discordサーバ `#support` にて、サブアカウントであることをサブアカウントのDiscordTag(例: `tomachi#0310`)を記述した上で**メインアカウントから申請し**、承認される。 +- サブアカウント認証が行われても、メインアカウントと同等の権限は与えられません。そのため、一部のチャンネル(`#server-chat` や `#freechat`など)は閲覧できません。 - メインアカウント、またはメインアカウントと連携されているMinecraftアカウントにおいて[サーバルール](/server/rules)や公式Discordサーバの禁止事項に違反する行為により処罰された場合、サブアカウントに対しても同様の対応を行う場合があります。 -- メインアカウントのアクセス手段をパスワード忘れなどにより失い、メインアカウントが操作不能となった場合は、理由を明記した上でサブアカウントをメインアカウントに切り替えたい旨を`#support`チャンネルで申請してください。 - - 本申請が行われたのち、運営は本人確認が完了次第旧メインアカウントからMinecraftアカウントとの連携を解除します。旧サブアカウントから`/link`によるMinecraftアカウント連携を行い、メインアカウントに設定して下さい。 +- メインアカウントのアクセス手段をパスワード忘れなどにより失い、メインアカウントが操作不能となった場合は、理由を明記した上でサブアカウントをメインアカウントに切り替えたい旨を `#support` チャンネルで申請してください。 + - 本申請が行われたのち、運営は本人確認が完了次第旧メインアカウントからMinecraftアカウントとの連携を解除します。旧サブアカウントから `/link` によるMinecraftアカウント連携を行い、メインアカウントに設定して下さい。 - 必要に応じ、旧メインアカウントはキック致します。 - メインアカウントとサブアカウントが連携されている状態で、メインアカウントがDiscordサーバより退出した場合、連携は自動的に解除されます。その後1ヶ月以内に以下の対応が取られない場合、サブアカウントについてもDiscordサーバよりキックされます。なおメインアカウントとサブアカウントともに、キックされた場合でも利用者の意思で再度公式Discordサーバへ参加することができます。 - - 公式Discordサーバ`#support`にて、メインアカウントが公式Discordサーバより退出した明確な理由が示される + - 公式Discordサーバ `#support` にて、メインアカウントが公式Discordサーバより退出した明確な理由が示される - メインアカウントにて再度公式Discordサーバに参加し、サブアカウントとの連携申請を行う - サブアカウントをメインアカウントに切り替える旨の申請を行う diff --git a/server/rules/index.md b/server/rules/index.md index 6f7f2a7b..870b6e51 100644 --- a/server/rules/index.md +++ b/server/rules/index.md @@ -3,7 +3,7 @@ title: サーバルール description: jao Minecraft Serverを楽しむためのサーバルールを記載します。 image: https://storage.jaoafa.com/4adcd454dc1c5294f6b71504eb5237b2.jpg createdAt: 2019-09-03 -updatedAt: 2021-09-27 +updatedAt: 2022-03-02 --- ここに書かれているものは、jao Minecraft Serverで楽しむための基本的なルールです。 @@ -15,15 +15,18 @@ updatedAt: 2021-09-27 ### 1. システムによって禁止されている行為 -以下の行為は**システムによって自動検知され、禁止**されます。システムによる**制限を意図的に回避して行った場合でも、処罰対象**となる場合があります。 +サーバへ負荷が掛かることや、サービスの運営に問題が生じることから、以下の行為を禁止します。 - 日本国外からの接続。 (システムによって日本国外からのアクセスと判断された場合はログインできません。) - 複数のアカウントでのログイン。 (最初にログインしたアカウント以外はログインできません。) - 悪意のあるModや外部ツール(連打ツール・定期的なキー入力ツール等)の使用。 (特有の挙動を検知し、自動でEBanします。) - 特定権限における荒らし行為に使用されるアイテム・ブロックの使用。(該当アイテム・ブロックの使用を制限します) -jao Minecraft Serverでは、違反行為による対応が適用されない他、運営の負荷軽減などを理由に複数アカウントの利用を禁止しています。 -また、システムによって禁止されるもの以外にも、上記に当てはまる行為が見つかった場合には、手動での処罰を実施する場合があります。 +以上に列挙した行為は、システムによって自動検知・制限がなされます。複数回の試行が見受けられた場合など、運営が悪質だと判断した際には、各種処罰の対象となることがあります。 +また以上に列挙した行為以外にも、システムによって自動制限された場合は、それを回避して実施しないでください。 + +jao Minecraft Serverでは、一個人が複数のアカウントを用いてアクセスすることを禁止しています。これは違反行為への対応が適用されない他、運営の負荷を軽減するためです。 +またシステムによって禁止されるもの以外にも、上記に当てはまる行為やその他運営が不適切だと判断する行為には、手動での処罰を実施する場合があります。 ### 2. 許可なく他人の建造物を改造する行為 @@ -108,8 +111,6 @@ jao Minecraft Serverでは、違反行為による対応が適用されない他 ### 禁止事項 -禁止事項に違反した場合、必要に応じてGlobalBan、LocalBanを科せられることがあります。 - - 利用者のキーボード等の入力以外を利用して、ブロックの設置・破壊・エンティティの発生・チャットの投稿などを行えるModの導入・使用 - サバイバルモード・アドベンチャーモードなどで、空中に浮くことのできるMod(Fly Modなど)の導入・使用 - giveコマンドなどを用いずに、アイテムの入手を可能にするModの導入・使用 diff --git a/server/specifications.md b/server/specifications.md index f6730beb..bbcb7450 100644 --- a/server/specifications.md +++ b/server/specifications.md @@ -3,7 +3,7 @@ title: サーバ仕様 description: jao Minecraft Server の様々な仕様を記載します。 image: https://storage.jaoafa.com/33efd2207119961cc985868f2ed3eb97.png createdAt: 2021-04-14 -updatedAt: 2021-09-27 +updatedAt: 2022-03-09 --- ここではサーバのさまざまな仕様を掲示しています。 @@ -17,9 +17,9 @@ updatedAt: 2021-09-27 ### バージョン -当サーバのバージョンは**1.16.5**ですが、以下のバージョンでもログインが可能です。 +当サーバのバージョンは**1.18.2**ですが、以下のバージョンでもログインが可能です。 -- Minecraft Java Edition: 1.9.x ~ 1.16.x +- Minecraft Java Edition: 1.9.x ~ 1.18.2 ### 規制されるログイン @@ -46,7 +46,7 @@ updatedAt: 2021-09-27 当サーバには他のバニラサーバとは異なるプラグインによる独自の仕様がございます。 -- 爆新地(自由建築エリア)内における水・溶岩の拡散を制限しています。 +- 中央市(自由建築エリア)内における水・溶岩の拡散を制限しています。 - ネザーポータルを作成できません。(`/wt 2`をお使いください) - 極端に遠い場所へのテレポートができません。 - 権限によっては一部のポーションの使用を禁止しています。 @@ -68,11 +68,6 @@ updatedAt: 2021-09-27 サーバの稼働状況については[こちら](https://status.jaoafa.com)をご確認ください。 またサーバが停止する際は、公式Discordサーバでも情報提供を行います。 -## MCBansについて - -当サーバでは、Minecraftプラグイン`MCBans`を導入しています。 -これにより他団体が運営するMinecraftサーバと、Ban情報の共有を行っています。 - ## 投票について 当サーバは[minecraft.jp](https://minecraft.jp/servers/play.jaoafa.com)と[monocraft.net](https://monocraft.net/servers/4ovU0v9PkdyJbNJVngf7)に登録しており、各サイトからの投票を受け付けています。 diff --git a/support/faq.md b/support/faq.md index 545a7522..1f47e64b 100644 --- a/support/faq.md +++ b/support/faq.md @@ -3,7 +3,7 @@ title: よくあるご質問 description: 利用者から寄せられるよくある質問について、Q&A形式でまとめています。 image: https://storage.jaoafa.com/1c1d94d9c886ee4565ba2627125b30ac.png createdAt: 2017-03-21 -updatedAt: 2021-09-27 +updatedAt: 2022-03-09 --- jao Minecraft Server(以下、「当サーバ」と呼びます)で、利用者から寄せられるよくある質問について、Q&A形式でまとめています。 @@ -31,25 +31,26 @@ jao Minecraft Server(以下、「当サーバ」と呼びます)で、利用 ## Q. どこに建築できるの? -「爆新地(ばくしんち)」と呼ばれる、最初にスポーンする町で建築することができます。 -鯖庁と呼ばれるスポーンの施設と、道路の上には建築することができませんのでご注意ください。 +最初にスポーンする「中央市 (ちゅうおうし)」と呼ばれる町で建築することができます。 +鯖庁と呼ばれるスポーンの施設には建築することができませんのでご注意ください。 -また、爆新地の外は許可制の土地(自治体)となっています。詳細は [こちら](/server/guidelines/cities) をご覧ください。 -![爆新地のエリア図](https://storage.jaoafa.com/63c8bfe2e680ffcb39cc5041ffc27951.png) +また、中央市の外は許可制の土地(自治体)となっています。詳細は [こちら](/server/guidelines/cities) をご覧ください。 +![中央市のエリア図](https://storage.jaoafa.com/1c8be9b479ecfaa8e68e56f4e294dd5d.png) ## Q. 「jao afa」とか「.」って何? 当サーバ独自の言語です。「jao」「afa」というは両方分けて発言して「こんにちは」という挨拶です。 -(**この挨拶をしなかったら処罰。使い方を間違ったら処罰。などといったことは絶対にしません。**) -ここでは解説しきれないので [こちら](https://wiki.jaoafa.com/用語) をご覧ください。 + +この挨拶をしなかったらダメ、使い方を間違ったらダメなどといったことはありません。ゆっくりと学んでいきましょう。 +ここでは解説しきれないので、詳しく知りたい方は [こちら](https://wiki.jaoafa.com/用語) をご覧ください。 ## Q. 建築がなくなってる -爆新地では、3ヶ月ログインのないプレイヤーの建築物を撤去することができます。(すべてではありませんが) +中央市では、3ヶ月ログインのないプレイヤーの建築物を撤去することができます。(すべてではありませんが) 定期的なサーバへのログインをお願いいたします。 なお諸事情により3ヶ月以上サーバにログインできない場合は、あらかじめ運営までご連絡ください。 -詳しい爆新地の建築ルールなどについては、[こちら](https://wiki.jaoafa.com/爆新地#.E3.83.AB.E3.83.BC.E3.83.AB)をご確認ください。 +詳しい中央市の建築ルールなどについては、[こちら](https://wiki.jaoafa.com/中央市#.E3.83.AB.E3.83.BC.E3.83.AB)をご確認ください。 ## Q. みんなどこ?/ 空き地がなかなか見つからない @@ -68,7 +69,7 @@ MinecraftIDの変更によって問題が発生した場合は運営にお問い ## Q. Modは導入してもいいの? 荒らし目的でないのであれば、基本許可しています。 -詳しくは [こちら](server/rules#Modについて) をご覧ください。 +詳しくは [こちら](server/rules#Modについて) のページをご覧ください。 ## Q. プラグインの不具合(バグ)を見つけた @@ -80,7 +81,7 @@ MinecraftIDの変更によって問題が発生した場合は運営にお問い ## Q. Banを解除してください… -Banの種別によって解除希望の方法が異なります。[こちら](/server/policies/bans)のページからご確認ください。 +基本的に[公式Discordサーバ](/blog/join-discord)の`#support`にて解除申請を受け付けています。Banについての詳細は[こちら](/server/policies/bans)のページからご確認ください。 ## Q. サーバ内で動画配信したい @@ -89,7 +90,7 @@ Banの種別によって解除希望の方法が異なります。[こちら](/s ## Q. 動けなくなった -大抵、サーバに入り直すことで解決できます。エレベーターはよくはまって動けなくなります。 +よくエレベーターにハマって動けなくなることがありますが、大抵はサーバに入り直すことで解決します。 ## Q. ChatBanされた覚えはないのにチャットができない diff --git a/support/inquiry.md b/support/inquiry.md index 60b93357..b39d7269 100644 --- a/support/inquiry.md +++ b/support/inquiry.md @@ -23,7 +23,7 @@ Minecraft開発元(Mojang)へのお問い合わせを希望される場合は[ ### お願い -- **GlobalBanなどの各種処罰の解除申請は[公式Discordサーバ](/blog/join-discord)の#supportチャンネルから行ってください。お問い合わせフォームでは原則として受け付けておりません。** +- **各種処罰(Ban)の解除申請は[公式Discordサーバ](/blog/join-discord)の#supportチャンネルから行ってください。お問い合わせフォームでは原則として受け付けておりません。** - jao Minecraft Server はJavaEdition(PC版)向けのサーバです。Bedrock Edition(iOS, Android, Xbox, Nintendo Switch, Windows 10 Edition)等からはログインできませんのでご注意ください。 - 回答内容の一部または全部を転用したり、二次利用することはご遠慮ください。 - お問い合わせ内容によっては回答までにお時間を頂く場合や、お答えできない場合がございます。