Trtr:註解編程
註解編程,是指在Trtr:Trtr的代碼中,使用註解替代手動編寫過多重複代碼的設計模式,本質上是由一個IoC框架代替完成。
約束
任何需要被自動處理的字段必須被"static"修飾[1],這也包括已經自行初始化的字段。方法的修飾與正常開發時無異。
示例
在任意位置(合理的軟件包下)編寫如下代碼,而後直接運行Minecraft,此時不需要自行去註冊這個方塊,Trtr:方塊反射框架會處理好這一切。
以下字段"IDENTIFIER"和"SETTINGS"必須存在,必須大寫。
@Auto
public class TestBlock extends TrtrBlock {
@Auto
public static final Identifier IDENTIFIER = Identifier.of("trtr", "test");
@Auto
public static final Settings SETTINGS = FabricBlockSettings.of(Material.STONE, MapColor.GRAY);
@Auto
public TestBlock(Settings settings) {
super(settings);
}
}
任何被支持的字段都可以以類似以上的方式被自動處理,而開發者只需要寫更少量的重複代碼。
自動初始化
Trtr的IoC框架支持自動初始化字段,例如此處有一BlockItem:
@Auto
public class TestBlockItem extends TrtrBlockItem {
@Auto
public static final FabricItemSettings SETTINGS = new FabricItemSettings();
@Auto
public AluniteOreItem(Block block, Settings settings) {
super(block, settings);
}
}
這時候可以直接在TestBlock中加入字段"ITEM"或"BLOCK_ITEM",而不需要任何的賦值。如下所示:
@Auto
public class TestBlock extends TrtrBlock {
@Auto
public static final Identifier IDENTIFIER = Identifier.of("trtr", "test");
@Auto
public static final Settings SETTINGS = FabricBlockSettings.of(Material.STONE, MapColor.GRAY);
@Auto
public static TestBlockItem ITEM;
@Auto
public static Class<TestBlockItem> ITEM = TestBlockItem.class;
@Auto
public TestBlock(Settings settings) {
super(settings);
}
}
約定
在使用註解編程時,只有匹配約定字段的名稱和類型才會被自動處理。
字段
標識符
標識符(Identifier)約定名稱為"IDENTIFIER"、類型為:Minecraft:net.minecraft.util.Identifier[2]。
設置(方塊)
方塊設置(Settings)約定名稱為"SETTINGS"、備選"SETTING",類型為:Minecraft:net.minecraft.block.AbstractBlock.Settings的子類[3],如net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSetting。[4]
方塊物品
方塊物品(BlockItem)約定名稱為"ITEM"、備選"BLOCK_ITEM",類型為:任意net.minecraft.item.BlockItem的子類[5]。
或者以形如Class<? extends BlockItem>的方式聲明類型。[4]
方塊戰利品(數據生成)
方塊戰利品(Loot)約定名稱為"LOOT"、備選"LOOT_PROVIDER",類型為Minecraft:net.fabricmc.fabric.api.datagen.v1.provider.SimpleFabricLootTableProvider的子類或Trtr:com.github.cao.awa.trtr.framework.data.gen.loot.LootFactory的實現[6],如Trtr:com.github.cao.awa.trtr.data.gen.loot.GenericBlockLootProvider。
或者以形如Class<? extends SimpleFabricLootTableProvider>或LootFactory<? extends SimpleFabricLootTableProvider>的方式聲明類型。[4]
方塊模型(數據生成)
方塊模型(models)約定名稱為"MODEL"、備選"MODEL_PROVIDER",類型為Minecraft:net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider的子類[7],如Trtr:com.github.cao.awa.trtr.data.gen.model.GenericBlockModelProvider。
或者以形如Class<? extends BlockItem>的方式聲明類型。[4]
方法
樣式
在代碼中,@Auto註解最好在每一個會被自動處理的字段、方法和類上出現,以統一標準樣式。但這一要求不是強制性的,只需要至少在類上添加註解即可使用註解編程,其他位置只是建議添加而非強制。
參考
- ↑ "FieldAccessor.java at main · cao-awa/the-road-to-reality". 草awa. 2023-03-16. Archived from the original on 2023-03-16. Retrieved 2023-03-16.
- ↑ "IdentifierAccessor.java at main · cao-awa/the-road-to-reality". 草awa. 2023-03-15. Archived from the original on 2023-03-15. Retrieved 2023-03-16.
- ↑ "BlockSettingAccessor.java at main · cao-awa/the-road-to-reality". 草awa. 2023-03-16. Archived from the original on 2023-03-16. Retrieved 2023-03-16.
- ↑ 4.0 4.1 4.2 4.3 "ExampleBlock.java at main · cao-awa/the-road-to-reality". 草二號機. 2023-03-15. Archived from the original on 2023-03-15. Retrieved 2023-03-16.
- ↑ "BlockItemAccessor.java at main · cao-awa/the-road-to-reality". 草awa. 2023-03-16. Archived from the original on 2023-03-16. Retrieved 2023-03-16.
- ↑ "LootDataGeneratorAccessor.java". 草awa. 2023-03-16. Archived from the original on 2023-03-16. Retrieved 2023-03-16.
- ↑ "ModelDataGeneratorAccessor.java at main · cao-awa/the-road-to-reality". 草awa. 2023-03-15. Archived from the original on 2023-03-15. Retrieved 2023-03-16.