Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions docs/zh-TW/contributing/contributing-to-docs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# 為文件作出貢獻

我們使用 [MkDocs](https://www.mkdocs.org/) 和 [Github Pages](https://pages.github.com/) 來建立並維護你現在正在閱讀的文件網站。

## 先決條件

在開始之前,請確保你的系統已安裝以下內容:

- **Python 3** - MkDocs 所需
- **pip** - Python 套件安裝工具(通常隨 Python 一起提供)

請參考 [MkDocs 的安裝指南](https://www.mkdocs.org/user-guide/installation/) 了解如何安裝這些相依套件。

## 如何開始

1. 複製 `pylon-docs` 儲存庫:`git clone https://github.com/pylonmc/pylon-docs`
2. 安裝所有必要的相依套件:`pip install -r requirements.txt`
3. 使用下列指令在本機執行文件網站:`mkdocs serve`

## 部署

只有核心成員可以部署網站。

1. 複製 `pylonmc.github.io` 儲存庫:`git clone https://github.com/pylonmc/pylonmc.github.io`
2. 在 **pylonmc.github.io 儲存庫** 中執行以下指令以部署網站:
`mkdocs gh-deploy --config-file ../pylon-docs/mkdocs.yml --remote-branch master`

[comment]: <> (TODO: 添加更詳細的說明,例如 Slimefun 的 (https://github.com/Slimefun/Slimefun4/wiki/Expanding-the-Wiki))
59 changes: 59 additions & 0 deletions docs/zh-TW/contributing/getting-started.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# 開始使用

Pylon Core 是以 [Kotlin](https://kotlinlang.org/) 編寫的,一種與 Java 相似但具有更多現代化特性與簡潔語法的語言。
如果你熟悉 Java,將能很快上手 Kotlin。

Pylon Base 則是以 Java 編寫。

## 如何開始

1. 複製 `pylon` 儲存庫:`git clone https://github.com/pylonmc/pylon`(或使用像 GitHub Desktop 這樣的圖形介面)
2. 若你使用 IntelliJ,它會自動完成所有設定。
若否,請執行 `./gradlew`。這會自動複製 `pylon-core` 與 `pylon-base` 儲存庫。
3. 如果你想將修改提交到 Pylon 專案,
**請刪除 `pylon-core` 或 `pylon-base` 目錄(視你要貢獻的部分而定),接著 fork 該儲存庫並將你的 fork 複製回同一個目錄中。**
否則,你將無法提交 Pull Request(除非你是 Pylon 開發者並擁有該專案的存取權)。

更多資訊請參考 [Pylon Master Project](./master-project) 頁面。

## 提交貢獻

我們歡迎對 Core 與 Base 的貢獻,但若你計畫進行重大變更,建議先與 Pylon 團隊確認,因為我們可能已有既定規劃,未必與你的修改相容。
如果你有興趣參與較大型的開發或有任何疑問,請加入我們的 Discord 伺服器與我們討論 :)

完成修改後,請開啟 Pull Request,並簡要說明你做了哪些變更以及原因。

## 測試

Pylon Core 擁有一組整合測試。
測試應僅針對關鍵功能(例如方塊儲存與配方)新增。

## 自訂 Dokka

Pylon 使用自訂版本的 Dokka 來生成 Javadoc。
這是因為預設的 Dokka 輸出存在許多錯誤,且外觀不佳。
Seggan 已經向 Dokka 專案提交修正的 Pull Request,但尚未被合併,因此暫時採用自訂版本。

若你希望查看「修正版」的文件輸出,可依以下步驟操作:

1. 複製 `pylonmc/dokka` 儲存庫:`git clone https://github.com/pylonmc/dokka`
2. 切換至 `pylon` 分支:`git checkout pylon`
3. 在根目錄中執行:
`./gradlew publishToMavenLocal -Pversion=2.1.0-pylon-SNAPSHOT`
注意:Dokka 專案相當龐大,首次建置將花費較長時間。
以 Seggan 的筆電為例,第一次執行約需 10 分鐘。
後續建置將會更快,只要不刪除快取即可。
4. 現在,在 Pylon 主專案中執行:
`./gradlew :pylon-core:pylon-core:dokkaGenerate -PusePylonDokka=true`
生成的輸出會位於:
`pylon/pylon-core/pylon-core/build/dokka`

## 卡關了,該怎麼辦?

1. 若是與 Pylon 相關的問題,先查看文件中是否已有說明。
若非 Pylon 特有問題,請善用 Google 搜尋。
2. 在相關儲存庫的 Issues 中搜尋是否已有類似問題。
3. 在我們的 Discord 伺服器中搜尋相關關鍵字,看看是否已有討論。
4. 若仍無法解決,請在 Discord 伺服器中發問。

[comment]: <> (TODO: 讓這份說明更易理解,也許可以加入截圖等輔助內容,因為經驗較少的使用者可能完全看不懂這些指令在做什麼)
41 changes: 41 additions & 0 deletions docs/zh-TW/contributing/master-project.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Pylon 主專案

Pylon 有一個主儲存庫(master repository),其中包含 `pylon-core` 與 `pylon-base`。
這樣的架構讓你能夠在自己的環境中運行自製版本的 Core,
使測試新功能變得更加容易。
這正是「如何開始」章節中所使用的方式。
我們建議你透過主儲存庫同時對 Base 與 Core 進行修改,
本指南後續的內容也會假設你是以這種方式進行開發。

## 專案結構
主專案的結構如下:
```
pylon/
pylon-base/
pylon-core/
dokka-plugin/
nms/
pylon-core/
test/
```
`pylon-base` 包含了 Pylon 的 Base 外掛。
`pylon-core` 則包含四個子專案:`dokka-plugin`、`nms`、`pylon-core` 與 `test`。
`dokka-plugin` 儲存我們自訂的 Dokka 插件,用於協助格式化 Javadocs。
`nms` 包含所有與伺服器內部機制(server internals)互動的 Pylon Core 程式碼。
它被分離為獨立的子專案,目的是將潛在不穩定的程式碼與其他部分隔離開來。
`pylon-core` 包含主要的 Pylon Core 程式碼,`test` 則包含 Pylon Core 的整合測試。

## 任務(Tasks)
Pylon 主專案中包含了一些在開發時非常有用的任務:

| 任務名稱 | 別名(Alias) | 說明 |
|------------------------------|---------------------|----------------------------------------------------------------------------------------------------------|
| `runServer` | `runSnapshotServer` | 使用目前版本的 Pylon Base 與 Pylon Core 啟動 Minecraft 伺服器 |
| `:pylon-base:runServer` | `runStableServer` | 使用最新穩定版本的 Pylon Core 及目前版本的 Pylon Base 啟動 Minecraft 伺服器 |
| `:pylon-core:test:runServer` | `runLiveTests` | 執行 Pylon Core 的整合測試 |

!!! danger
若你在 IntelliJ 中使用這些任務的別名啟動並附加除錯器,你會發現它無法運作。
我也不知道為什麼會發生這種情況。
若要成功附加除錯器,請執行實際的任務名稱而非別名。
例如:不要執行 `runSnapshotServer`,請執行 `runServer`。
123 changes: 123 additions & 0 deletions docs/zh-TW/creating-addons/custom-items/adding-a-custom-item.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# 新增自訂物品(Adding a custom item)

## 概述(Overview)

到目前為止,我們所建立的「自訂」物品,只是將法國麵包恢復飢餓值從 5 提升到 6。
但如果我們希望能夠右鍵點擊生物讓它著火該怎麼辦?
這不像食物那樣有現成的方法可用,因此我們需要撰寫一些程式碼來實現這個功能。

---

## 法國麵包火焰噴射器(The baguette flamethrower)

為了示範這一點,讓我們建立一個新的物品:「法國麵包火焰噴射器」。

### 建立「一般物品」(Creating a 'normal item')

首先,我們先建立一個「一般」物品,就像前一章所做的那樣。

=== "Java"
```java title="MyAddon.java"
NamespacedKey baguetteFlamethrowerKey = new NamespacedKey(this, "baguette_flamethrower");
ItemStack baguetteFlamethrower = ItemStackBuilder.pylonItem(Material.BREAD, baguetteFlamethrowerKey)
.build();
PylonItem.register(PylonItem.class, baguetteFlamethrower);
BasePages.FOOD.addItem(baguetteFlamethrowerKey);
```
=== "Kotlin"
```kotlin title="MyAddon.kt"
val baguetteFlamethrowerKey = NamespacedKey(this, "baguette_flamethrower")
val baguetteFlamethrower = ItemStackBuilder.pylonItem(Material.BREAD, baguetteFlamethrowerKey)
.build()
PylonItem.register<PylonItem>(baguetteFlamethrower)
BasePages.FOOD.addItem(baguetteFlamethrowerKey)
```

```yaml title="en.yml"
item:
baguette_flamethrower:
name: "Baguette Flamethrower"
lore: |-
<arrow> 使用法國麵包的力量點燃你所注視的方塊
```

---

### 建立自訂物品類別(Creating a custom item class)

接下來,我們要新增讓實體著火的程式碼。

為了做到這點,我們可以建立一個自訂類別 `BaguetteFlamethrower`。
所有 Pylon 物品類別都必須繼承 [PylonItem]。

=== "Java"
建立一個新檔案 `BaguetteFlamethrower.java` 並加入以下內容:

```java title="BaguetteFlamethrower.java"
public class BaguetteFlamethrower extends PylonItem {
public BaguetteFlamethrower(@NotNull ItemStack stack) {
super(stack);
}
}
```
=== "Kotlin"
建立一個新檔案 `BaguetteFlamethrower.kt` 並加入以下內容:

```kotlin title="BaguetteFlamethrower.kt"
class BaguetteFlamethrower(stack: ItemStack) : PylonItem(stack)
```

---

現在我們希望當玩家手持「法國麵包火焰噴射器」右鍵點擊實體時能發生事件。
為了實現這點,我們可以實作 [PylonItemEntityInteractor] 介面。
這是 Pylon 內建的一個介面,包含一個方法:`onUsedToRightClickEntity`。

=== "Java"
```java title="BaguetteFlamethrower" hl_lines="6-9"
public class BaguetteFlamethrower extends PylonItem implements PylonItemEntityInteractor {
public BaguetteFlamethrower(@NotNull ItemStack stack) {
super(stack);
}

@Override
public void onUsedToRightClickEntity(@NotNull PlayerInteractEntityEvent event) {
event.getRightClicked().setFireTicks(40);
}
}
```
=== "Kotlin"
```kotlin title="BaguetteFlamethrower" hl_lines="2-4"
class BaguetteFlamethrower(stack: ItemStack) : PylonItem(stack), PylonItemEntityInteractor {
override fun onUsedToRightClickEntity(event: PlayerInteractEntityEvent) {
event.rightClicked.fireTicks = 40
}
}
```

---

### 使用自訂物品類別(Using the custom item class)

要讓這個類別生效,我們必須告訴 Pylon 使用此類別,而非預設的 `PylonItem`。

請將你的 `PylonItem.register(...)` 改為以下內容:

=== "Java"
```java
PylonItem.register(BaguetteFlamethrower.class, baguette);
```
=== "Kotlin"
```kotlin
PylonItem.register<BaguetteFlamethrower>(baguette)
```

---

就這樣!現在啟動伺服器,
當你用法國麵包火焰噴射器右鍵點擊一個實體時,它將會著火 40 tick!

---

[PylonItem]: https://pylonmc.github.io/pylon-core/docs/javadoc/io/github/pylonmc/pylon/core/item/PylonItem.html
[PylonItemEntityInteractor]: https://pylonmc.github.io/pylon-core/docs/javadoc/io/github/pylonmc/pylon/core/item/base/PylonItemEntityInteractor.html
Loading