最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

我的世界 fabric 1.20.1 開發(fā)教程 ep1 前言

2023-07-29 19:16 作者:Flandre芙蘭  | 我要投稿

# 前言


官方wiki:fabricmc.net/wiki/zh_cn


有中文,非常詳細(xì)。



# Minecraft開發(fā)的基礎(chǔ)


- 具有Java基礎(chǔ),熟悉JAVA的語法,例如Lambda,泛型,語法糖,和基礎(chǔ)的語法。

- 具有使用互聯(lián)網(wǎng)查找答案的基礎(chǔ)



# 模組編寫什么


給Minecraft游戲中增加或者修改內(nèi)容



# Fabric是什么


寫模組的工具,分為幾個部分


- Fabric Loader - 加載Minecraft代碼修改的框架

- Fabric Loom 給Fabirc的mod構(gòu)建系統(tǒng)

- Fabric 語言模塊 提供了JVM上其他語言開發(fā),例如Kotlin和Scala

- Fabric API - 提供了添加修改Minecraft內(nèi)容的工具

- Fabric Installer - 安裝Fabric Loader到Minecraft 的工具


由于Minecraft是商業(yè)版的游戲,沒有開源的代碼,mojang為了防止盜版,混淆了Minecraf的代碼,所以在我們idea中看到的源代碼是經(jīng)過反混淆后的代碼,但是這些代碼在反混淆之前是一些隨機(jī)名稱,命名的代碼,例如一個版本的方法是abc,而到了下一個版本就是abd了。Fabric提供了一套映射工具給每個名稱另外起了一個能看得懂的名字。


當(dāng)然反混淆的yarn并沒有做到將全部的名稱修改掉,你還是會在編程過程中看到混淆之前的名稱。



# 代碼結(jié)構(gòu)


## 注冊表


游戲中的方塊,物品的等內(nèi)容在游戲加載時候會放入注冊表,游戲在通過這些注冊表的內(nèi)容去獲得相應(yīng)的實體。例如Item 和ItemStack


另外游戲還有數(shù)據(jù)驅(qū)動的一些功能,例如方塊的貼圖等等。



## 端


Minecraft運行在兩個線程,服務(wù)器端和客戶端,單人游戲你自己進(jìn)入世界就相當(dāng)于開啟了一個服務(wù)器端,和一個客戶端。


如果是多人游戲,相當(dāng)于服務(wù)端是你輸入的地址是服務(wù)器端,而你操作的是客戶端。


在服務(wù)端和客戶端上的數(shù)據(jù)要保持一致,例如區(qū)塊,箱子的內(nèi)容,玩家的位置。


服務(wù)端主要負(fù)責(zé)的是游戲的邏輯相關(guān)的內(nèi)容,而客戶端負(fù)責(zé)的是界面,GUI等。


所以在編程時候不要在服務(wù)器調(diào)用客戶端相關(guān)的內(nèi)容,也不要再客戶端執(zhí)行一些邏輯后不將數(shù)據(jù)同步到服務(wù)器。



# Fabric編寫的內(nèi)容


Fabric提供了一些修改和增加Minecraft原版的內(nèi)容的方法和工具,當(dāng)然也并不是全部,此外還有許多的第三方的庫可以幫你完成工作。



# Minecraft API


Minecraft本身就有一部分的API是可以直接使用的, 你不要重復(fù)的造輪子,例如Registry類可以直接注冊方塊和物品。


此外使用JSON數(shù)據(jù)可以驅(qū)動很多的共。你可以在mod開發(fā)中使用,F(xiàn)abric會自動注入。例如方塊的紋理,掉落物表等等。



# Fabric API


Fabric API主打一個輕量級,快速移植新版本, 所以API并不是涵蓋了所有的內(nèi)容,主要有常見的事件,聯(lián)網(wǎng)和渲染相關(guān)的內(nèi)容。



## 第三方API


第三方API填補Fabirc API輕量級的空白。應(yīng)該盡量使用Fabric API 和第三方API ,盡量不要直接自己編寫Mixin


第三方API WIKI 列表:https://fabricmc.net/wiki/zh_cn:tutorial:libraries



# Mixin


Mixin強大,可以直接修改Minecraft自己的代碼,但是多個mod之間會引起沖突。


Mixin提供了幾種功能


- 添加接口


mixin的安全方法之一,添加新的接口到Minecraft類中,通過強制轉(zhuǎn)化訪問接口,不會沖突。


- 回調(diào)注入


@Inject 向現(xiàn)有的方法中添加回調(diào)鉤子,還可以攔截更改返回值,回調(diào)可以堆疊,不會沖突


- 重定向注入


@Redirect 讓你的代碼可以調(diào)用訪問目標(biāo)方法的變量,僅會重定向一次,如果多個mod對目標(biāo)代碼進(jìn)行了重定向就會沖突。


- 覆寫


極有可能沖突,不要怎么干。


# 閱讀Minecraft代碼


Minecraft沒有什么文檔,而且很容易過時,所以直接看源代碼是好的。


# 搜索Minecraft 主類


idea 中 ctrl+N 將搜索范圍設(shè)置為 項目和庫


# 查找你想看到的類


看其他的開源的mod如何做


注冊相關(guān)的可以在 `net.minecraft.util.registry.Registry`看到


所有的類從net.minecraft.client.main.Main 和 net.minecraft.server.Main 繼承出來,可以通過這兩個父類查找。


# 注冊表


這里是添加游戲內(nèi)容的地方,例如方塊,物品,等等。


# 標(biāo)準(zhǔn)注冊表


## 一般注冊表


這些注冊表對很多類型的模組都有用:


* `Registry.REGISTRIES`

? * 包含所有的注冊表。

* `Registry.BLOCK`

? * 包含所有的[方塊](https://fabricmc.net/wiki/zh_cn:tutorial:blocks "zh_cn:tutorial:blocks")。

* `Registry.ITEM`

? * 包含所有的[物品](https://fabricmc.net/wiki/zh_cn:tutorial:items "zh_cn:tutorial:items")(包括方塊物品)。

* `Registry.BLOCK_ENTITY_TYPE`

? * 包含每個[方塊實體](https://fabricmc.net/wiki/zh_cn:tutorial:blockentity "zh_cn:tutorial:blockentity")的 `BlockEntityType`。方塊實體類型用來反序列化方塊實體并儲存兼容的方塊。

* `Registry.STATUS_EFFECT`

? * 包含所有的[狀態(tài)效果](https://fabricmc.net/wiki/zh_cn:tutorial:status_effects "zh_cn:tutorial:status_effects"),如隱身和夜視。

* `Registry.PARTICLE_TYPE`

? * 包含所有的[粒子類型](https://fabricmc.net/wiki/zh_cn:tutorial:particles "zh_cn:tutorial:particles")。

* `Registry.FLUID`

? * 包含所有的[流體](https://fabricmc.net/wiki/zh_cn:tutorial:fluids "zh_cn:tutorial:fluids")。

* `Registry.ENCHANTMENT`

? * 包含所有的附魔。

* `Registry.POTION`

? * 包含所有不同的藥水類型,比如“l(fā)ong potion of night vision”“water”或“potion of luck”。

* `Registry.DIMENSION_TYPE`

? * 包含所有的維度類型。

* `Registry.SCREEN_HANDLER`

? * 包含所有的屏幕處理器(screen handlers)。屏幕處理器用于在服務(wù)器和客戶端之間同步 GUI 狀態(tài)。

* `Registry.RECIPE_TYPE`

? * 包含所有的[配方類型](https://fabricmc.net/wiki/zh_cn:tutorial:recipe_types_introduction "zh_cn:tutorial:recipe_types_introduction")。

* `Registry.RECIPE_SERIALIZER`

? * 包含所有的配方序列化器。配方序列化器用于加載配方,同一類型可以有多個序列化器(例如有序和無需合成配方)。

* `Registry.PAINTING_MOTIVE`

? * 包含所有的畫的類型。

* `Registry.SOUND_EVENT`

? * 包含所有的[聲音事件](https://fabricmc.net/wiki/zh_cn:tutorial:sounds "zh_cn:tutorial:sounds")如 `entity.item.pickup`。

* `Registry.STAT`

? * 包含所有不同的統(tǒng)計類型。統(tǒng)計使用泛型 `<T>`,用于獲取不同 `T` 值的不同數(shù)據(jù)。

? ? * 不依賴于外部內(nèi)容的統(tǒng)計,如 `walk_one_cm`,使用 `custom` 統(tǒng)計類型,它使用注冊的 `Identifier` 作為 `T` 類型。

? ? * 不屬于 `custom` 統(tǒng)計的統(tǒng)計可能依賴于特定的方塊或者物品類型,如 `Stats.MINED`。

* `Registry.CUSTOM_STAT`

? * 包含所有的“自定義統(tǒng)計”,即不依賴于外部內(nèi)容的統(tǒng)計 ID。


## 實體


絕大多數(shù)這些注冊表,除了 `ENTITY_TYPE` 自身,都與實體 AI 有關(guān)。


* `Registry.ENTITY_TYPE`

? * 包含每個[實體](https://fabricmc.net/wiki/zh_cn:tutorial:entity "zh_cn:tutorial:entity")的實體類型(`EntityType`)。類似于方塊實體類型,實體類型用于同步和取消序列化。

* `Registry.SCHEDULE`

? * 包含實體(通常是村民)的時刻表。時刻表控制實體基于一天內(nèi)時間的行為。

* `Registry.ACTIVITY`

? * 控制實體(通常是村民)的活動。這些活動,比如 `play` 或 `work`,控制實體的行為。

* `Registry.SENSOR_TYPE`

? * 包含每個實體傳感器的類型。傳感器允許實體“感受”不同的事物,并將其儲存在記憶中。

? * 類似于時刻表和活動,主要用于村民。

* `Registry.MEMORY_MODULE_TYPE`

? * 包含所有類型的記憶模塊。記憶模塊描述了實體能夠記住的不同內(nèi)容。

* `Registry.VILLAGER_TYPE`

? * 包含所有村民生物群系類型。

* `Registry.VILLAGER_PROFESSION`

? * 包含所有村民職業(yè)。

* `Registry.POINT_OF_INTEREST_TYPE`

? * 包含所有興趣點樂行。興趣點允許實體尋找世界內(nèi)的不同方塊,比如村民工作站點。也用于尋找下界傳送門。


## 世界生成


Minecraft的世界生成比較復(fù)雜,對于世界生成有許多不同的注冊表。


* `Registry.BIOME`

? * 包含所有的[生物群系](https://fabricmc.net/wiki/zh_cn:tutorial:biomes "zh_cn:tutorial:biomes")。

* `Registry.FEATURE`

? * 包含所有的[地物](https://fabricmc.net/wiki/zh_cn:tutorial:features "zh_cn:tutorial:features"),包括結(jié)構(gòu)。

* `Registry.STRUCTURE_FEATURE`

? * 包含所有的[結(jié)構(gòu)地物](https://fabricmc.net/wiki/zh_cn:tutorial:structures "zh_cn:tutorial:structures")。

* `Registry.CARVER`

? * 包含所有的雕刻器。雕刻器用于創(chuàng)建洞穴和峽谷。

* `Registry.DECORATOR`

? * 包含所有的裝飾器。裝飾器用于安放特征。

* `Registry.BIOME_SOURCE_TYPE`

? * 包含所有的生物群系源類型,這決定了生成世界時使用哪些生物群系。

* `Registry.TREE_DECORATOR_TYPE`

? * 包含所有的樹木裝飾器類型。這些裝飾器添加一些附加方塊,例如蜂箱、藤蔓。

* `Registry.FOLIAGE_PLACER_TYPE`

? * 包含所有的樹葉放置器類型,用于生成樹葉。

* `Registry.BLOCK_STATE_PROVIDER_TYPE`

? * 包含所有的方塊狀態(tài)提供器類型,用于基于位置選擇可能的隨機(jī)方塊狀態(tài)。

* `Registry.BLOCK_PLACER_TYPE`

? * 包含所有的方塊放置器類型,用于在 `RandomPatchFeature` 之類的地形中放置方塊。

* `Registry.CHUNK_GENERATOR_TYPE`

? * 包含所有的區(qū)塊生成器類型。區(qū)塊生成器決定了地形的基本形狀,如 `surface` 生成類似于主世界的地表地形,`caves` 用于生成類似于下界的洞穴地形,`floating_islands` 用于生成類似于末地的浮島類型。

* `Registry.CHUNK_STATUS`

? * 包含所有的區(qū)塊狀態(tài)類型。區(qū)塊狀態(tài)描述了區(qū)塊中世界生成的當(dāng)前進(jìn)站。

* `Registry.STRUCTURE_PIECE`

? * 包含所有的結(jié)構(gòu)構(gòu)件。結(jié)構(gòu)構(gòu)件是結(jié)構(gòu)的小部分,例如單間房間。

* `Registry.RULE_TEST`

? * 包含所有的規(guī)則測試類型,用于在世界生成中匹配方塊。

* `Registry.STRUCTURE_PROCESSOR`

? * 包含所有的結(jié)構(gòu)處理器類型。結(jié)構(gòu)處理器會在結(jié)構(gòu)生成后對其進(jìn)行修改。

* `Registry.STRUCTURE_POOL_ELEMENT`

? * 包含所有的結(jié)構(gòu)池元素。結(jié)構(gòu)池元素時結(jié)構(gòu)的更小部分,包含在池結(jié)構(gòu)構(gòu)件中,用于生成基于數(shù)據(jù)包的結(jié)構(gòu)(例如使用拼圖的結(jié)構(gòu))。

* `Registry.SURFACE_BUILDER`

? * 包含所有的地表構(gòu)造器。地表構(gòu)造器


# 修改不要重新加載游戲


### 重新加載更改的類


在 Eclipse 或 Intellij IDEA 中,以調(diào)試模式運行 Minecraft。要應(yīng)用代碼更改,在 Intellij 中點按“構(gòu)建”按鈕或在 Eclipse 中保存。注意:這僅允許您更改方法主體。如果進(jìn)行任何其他類型的更改,則必須重新啟動。但是,如果使用 [DCEVM](http://dcevm.github.io/ "http://dcevm.github.io/"),則可以進(jìn)行大多數(shù)更改,包括添加和刪除方法和類。


重載貼圖資源


F3+T,例如方塊的貼圖等


重加載數(shù)據(jù)


例如配方,loottable和tag, 輸入命令/realod


我的世界 fabric 1.20.1 開發(fā)教程 ep1 前言的評論 (共 條)

分享到微博請遵守國家法律
阳泉市| 额敏县| 舒城县| 新田县| 盘山县| 深泽县| 克拉玛依市| 炉霍县| 始兴县| 德格县| 邓州市| 沾化县| 佛冈县| 上饶县| 旌德县| 汉中市| 安丘市| 同心县| 鄂伦春自治旗| 无棣县| 永嘉县| 晋江市| 溧阳市| 威远县| 金塔县| 城市| 霸州市| 华蓥市| 广宗县| 武清区| 永州市| 广元市| 安图县| 民勤县| 改则县| 陵川县| 青田县| 麻城市| 西安市| 高清| 石楼县|