{"id":27486,"date":"2023-09-23T10:34:10","date_gmt":"2022-11-03T17:27:53","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94\/"},"modified":"2025-08-12T02:59:08","modified_gmt":"2025-08-11T18:59:08","slug":"%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94\/","title":{"rendered":"\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09"},"content":{"rendered":"<h1>\u6211\u5728Minecraft 1.12.2\u4e2d\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u672c\u4e2d\u7684\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\uff08\u793a\u4f8b\u4ee3\u7801\uff09\u7684\u5907\u5fd8\u5f55\u3002\u521b\u5efa\u4e00\u4e2a\u53ef\u4ee5\u901a\u8fc7\u53f3\u952e\u70b9\u51fb\u6536\u83b7\u7684\u704c\u6728\u3002<\/p>\n<h2>\u73af\u5883<\/p>\n<ul class=\"post-ul\">Forge MDK: forge-1.12.2-14.23.5.2768<\/ul>\n<h2>\u524d\u63d0 (Qian2ti2)<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u8ffd\u52a0\u3057\u305f\u30d6\u30ed\u30c3\u30af\u3084\u30a2\u30a4\u30c6\u30e0\u306e\u767b\u9332\u7528\u30af\u30e9\u30b9\u3084\u30d7\u30ed\u30ad\u30b7\u30af\u30e9\u30b9\u3092\u7528\u610f\u3057\u3066\u3042\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>(\u50d5\u306f\u3042\u3086\u305f\u304d\u3055\u3093\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u901a\u308a\u306b\u3084\u308a\u307e\u3057\u305f)<\/p>\n<p>\u30c6\u30af\u30b9\u30c1\u30e3\u306e\u30c9\u30c3\u30c8\u7d75\u3092\u7528\u610f\u3057\u3066\u3042\u308b<\/p>\n<h2>\u53c2\u8003\u81eaVanilla\u4ee3\u7801\u3002\u5907\u8003\uff1a\u65b0\u64cd\u4f5c\u4ec5\u4ec5\u662f\u5c06\u53d8\u91cf\u8d4b\u503c\u7ed9\u4e86\u539f\u59cb\u503c\uff0c\u6ca1\u6709\u8fdb\u884c\u4efb\u4f55\u5176\u4ed6\u64cd\u4f5c\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">1.12.2\u306e<\/ul>\n<\/li>\n<\/ul>\n<p>ItemFood.class<br \/>\nItemSeed.class<br \/>\nBlockCrops.class<br \/>\nBlockCarrots.class<br \/>\napple.json<br \/>\nacacia_sapling.json<br \/>\ncarrots.json<\/p>\n<p>1.14.4\u306e<\/p>\n<p>SweetBerryBushBlock.class<\/p>\n<h2>\u6700\u57fa\u672c\u7684\u5fc5\u9700\u4ee3\u7801\u6211\u60f3\u6dfb\u52a0\u6885\u6811\uff08\u6536\u83b7\u6b64MOD\u7684\u6885\u5b50\uff09\u3002<br \/>\n\u5907\u6ce8\uff1a\u8bf7\u51c6\u5907\u597d\u6ce8\u518c\u7528\u7684\u7c7b\u3002<\/p>\n<h3>\u6587\u4ef6\u7684\u653e\u7f6e\u30d1\u30c3\u30b1\u30fc\u30b8\u540d\u3068\u304b\u306f\u30d0\u30cb\u30e9\u306e\u30de\u30cd\u3063\u5b50\u3057\u3066\u307e\u3059<\/p>\n<h4>\u4e3b\u8981\u7684\u6e90\u7801\u6587\u4ef6\u4f4d\u4e8esrc\/main\/java\u76ee\u5f55\u4e0b\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">FFFMItems.java(\u30a2\u30a4\u30c6\u30e0\u306e\u767b\u9332\u7528\u30af\u30e9\u30b9)<\/ul>\n<\/li>\n<\/ul>\n<p>oguro.fffm.init<\/p>\n<p>FFFMBlocks.java(\u30d6\u30ed\u30c3\u30af\u306e\u767b\u9332\u7528\u30af\u30e9\u30b9)<\/p>\n<p>oguro.fffm.init<\/p>\n<p>BlockFruitTree.java(\u679c\u7269\u306e\u6728\u306e\u7279\u6027\u3092\u6c7a\u3081\u308b\u30af\u30e9\u30b9)<\/p>\n<p>oguro.fffm.block<\/p>\n<p>BlockApricotTree.java(\u3042\u3093\u305a\u306e\u6728\u72ec\u81ea\u306e\u6027\u8cea\u3092\u6c7a\u3081\u308b\u30af\u30e9\u30b9)<\/p>\n<p>oguro.fffm.block<\/p>\n<p>ItemFruit.java(\u679c\u7269\u306e\u7279\u6027\u3092\u6c7a\u3081\u308b\u30af\u30e9\u30b9)<\/p>\n<p>oguro.fffm.item<\/p>\n<p>ItemApricot.java(\u3042\u3093\u305a\u72ec\u81ea\u306e\u6027\u8cea\u3092\u6c7a\u3081\u308b\u30af\u30e9\u30b9)<\/p>\n<p>oguro.fffm.item<\/p>\n<p>ItemSapling.java(\u679c\u7269\u306e\u6728\u306e\u82d7\u306e\u6027\u8cea\u3092\u6c7a\u3081\u308b\u30af\u30e9\u30b9)<\/p>\n<p>oguro.fffm.item<\/p>\n<p>ItemApricotSapling.java(\u3042\u3093\u305a\u306e\u82d7\u72ec\u81ea\u306e\u6027\u8cea\u3092\u6c7a\u3081\u308b\u30af\u30e9\u30b9)<\/p>\n<p>oguro.fffm.item<\/p>\n<h4>src\/main\/resources(\u30e2\u30c7\u30eb)\u5099\u8003: \u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u308f\u306a\u3044\u3068\u30a4\u30f3\u30d9\u30f3\u30c8\u30ea\u306b\u8868\u793a\u3055\u308c\u308b\u3053\u3068\u306f\u306a\u3044\u306e\u3067BlockApricotTree\u306e\u30a4\u30f3\u30d9\u30f3\u30c8\u30ea\u3067\u306e\u898b\u305f\u76ee\u306ejson\u3092\u7528\u610f\u3057\u3066\u3044\u306a\u3044\u304clog\u306b\u30a8\u30e9\u30fc\u51fa\u307e\u304f\u3063\u3066\u9b31\u9676\u3057\u3044\u306e\u3067\u9069\u5f53\u3067\u3044\u3044\u304b\u3089\u7528\u610f\u3057\u305f\u307b\u3046\u304c\u3044\u3044\u304b\u3082(\u898b\u305f\u76ee\u304c\u8aad\u307f\u8fbc\u3081\u306a\u3044\u3060\u3051\u306a\u306e\u3067\u5927\u4e08\u592b)<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">apricot.json(\u3042\u3093\u305a\u306e\u898b\u305f\u76ee)<\/ul>\n<\/li>\n<\/ul>\n<p>assets.fffm.models.item<\/p>\n<p>apricot_tree_sapling.json(\u3042\u3093\u305a\u306e\u82d7\u306e\u898b\u305f\u76ee)<\/p>\n<p>assets.fffm.models.item<\/p>\n<p>apricot_tree(\u3042\u3093\u305a\u306e\u6728\u306e\u30d6\u30ed\u30c3\u30af\u306f\u30e1\u30bf\u30c7\u30fc\u30bf\u304c\u9055\u3046\u8907\u6570\u306e\u30d6\u30ed\u30c3\u30af\u3060\u304b\u3089\u3001\u305d\u308c\u305e\u308c\u306e\u898b\u305f\u76ee\u3092\u8a18\u8ff0\u3057\u305fjson\u306f\u3069\u308c\u304b\u6307\u5b9a\u3059\u308b\u30d5\u30a1\u30a4\u30eb)<\/p>\n<p>assets.fffm.blockstates<\/p>\n<p>apricot_tree_stage0.json<br \/>\napricot_tree_stage1.json<br \/>\napricot_tree_stage2.json<br \/>\napricot_tree_stage3.json (\u3042\u3093\u305a\u306e\u6728\u306e\u305d\u308c\u305e\u308c\u6210\u9577\u6bb5\u968e\u3054\u3068\u306e\u898b\u305f\u76ee)<\/p>\n<p>assets.fffm.models.block<\/p>\n<h4>\u4e3b\u8981\u7684\u8d44\u6e90\uff08\u7eb9\u7406\uff09<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">apricot.png(\u3042\u3093\u305a\u306e\u30c6\u30af\u30b9\u30c1\u30e3)<\/ul>\n<\/li>\n<\/ul>\n<p>assets.fffm.textures.items<\/p>\n<p>apricot_tree_sapling.png(\u3042\u3093\u305a\u306e\u82d7\u306e\u30c6\u30af\u30b9\u30c1\u30e3)<\/p>\n<p>assets.fffm.textures.items<\/p>\n<p>apricot_tree_stage0.png<br \/>\napricot_tree_stage1.png<br \/>\napricot_tree_stage2.png<br \/>\napricot_tree_stage3.png(\u3042\u3093\u305a\u306e\u6728\u306e\u30c6\u30af\u30b9\u30c1\u30e3)<\/p>\n<p>assets.fffm.textures.blocks<\/p>\n<h3>\u8bfe\u7a0b\u6e90\u4ee3\u7801<\/p>\n<h4>FFFMItems.java<\/p>\n<pre class=\"post-pre\"><code>package oguro.fffm.init;\r\n\r\nimport java.util.LinkedList;\r\nimport java.util.List;\r\n\r\nimport net.minecraft.client.renderer.block.model.ModelResourceLocation;\r\nimport net.minecraft.item.Item;\r\nimport net.minecraft.item.ItemFood;\r\nimport net.minecraftforge.client.model.ModelLoader;\r\nimport net.minecraftforge.event.RegistryEvent;\r\nimport net.minecraftforge.fml.common.Mod;\r\nimport net.minecraftforge.fml.common.eventhandler.SubscribeEvent;\r\nimport oguro.fffm.FFFMRef;\r\nimport oguro.fffm.item.ItemApricot;\r\nimport oguro.fffm.item.ItemApricotTreeSapling;\r\nimport oguro.fffm.item.ItemSapling;\r\n\r\npublic class FFFMItems\r\n{\r\n    \/\/\u30a2\u30a4\u30c6\u30e0\u3092\u5ba3\u8a00\u3059\u308b\r\n    public static ItemSapling APRICOT_TREE_SAPLING;\r\n\r\n    public static ItemFood APRICOT;\r\n\r\n    \/\/\u30a2\u30a4\u30c6\u30e0\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u751f\u6210\u3059\u308b\r\n    public static void init()\r\n    {\r\n        APRICOT_TREE_SAPLING = (ItemSapling) new ItemApricotTreeSapling(FFFMBlocks.APRICOT_TREE).setRegistryName(\"apricot_tree_sapling\")\r\n                .setUnlocalizedName(\"apricot_tree_sapling\");\r\n\r\n        APRICOT = (ItemFood) new ItemApricot().setRegistryName(\"apricot\")\r\n                .setUnlocalizedName(\"apricot\");\r\n\r\n    }\r\n\r\n\r\n    \/\/\u30a2\u30a4\u30c6\u30e0\u3092\u767b\u9332\u3059\u308b\r\n    public static void register()\r\n    {\r\n        registerItem(APRICOT_TREE_SAPLING);\r\n\r\n        registerItem(APRICOT);\r\n    }\r\n\r\n    public static void registerItem(Item item)\r\n    {\r\n        RegistrationHandler.ITEMS.add(item);\r\n    }\r\n\r\n    \/\/\u30a2\u30a4\u30c6\u30e0\u306e\u63cf\u753b\u3092\u767b\u9332\u3059\u308b\r\n    public static void registerRenders()\r\n    {\r\n        registerRender(APRICOT_TREE_SAPLING);\r\n\r\n        registerRender(APRICOT);\r\n\r\n    }\r\n\r\n    private static void registerRender(Item item)\r\n    {\r\n        ModelLoader.setCustomModelResourceLocation(item, 0,\r\n                new ModelResourceLocation(item.getRegistryName(),\"inventory\"));\r\n    }\r\n\r\n    \/\/\u5185\u90e8\u30af\u30e9\u30b9\u3067\u30a2\u30a4\u30c6\u30e0\u3092\u767b\u9332\u3059\u308b\r\n    @Mod.EventBusSubscriber(modid = FFFMRef.MODID)\r\n    public static class RegistrationHandler\r\n    {\r\n\r\n        public static final List&lt;Item&gt; ITEMS = new LinkedList&lt;&gt;();\r\n\r\n        @SubscribeEvent\r\n        public static void registerItems(final RegistryEvent.Register&lt;Item&gt; event)\r\n        {\r\n            FFFMItems.init();\r\n            FFFMItems.register();\r\n            ITEMS.stream().forEach(item -&gt; event.getRegistry().register(item));\r\n\r\n        }\r\n    }\r\n}\r\n<\/code><\/pre>\n<h4>FFFMBlocks.java\u53ef\u4ee5\u8fdb\u884c\u6539\u5199\u4e3a\uff1a\u65b9\u65b9\u65b9\u65b9\u6a21\u5757.java<\/p>\n<pre class=\"post-pre\"><code>package oguro.fffm.init;\r\n\r\nimport java.util.LinkedList;\r\nimport java.util.List;\r\n\r\nimport net.minecraft.block.Block;\r\nimport net.minecraft.client.renderer.block.model.ModelResourceLocation;\r\nimport net.minecraft.item.Item;\r\nimport net.minecraft.item.ItemBlock;\r\nimport net.minecraftforge.client.model.ModelLoader;\r\nimport net.minecraftforge.event.RegistryEvent;\r\nimport net.minecraftforge.fml.common.Mod;\r\nimport net.minecraftforge.fml.common.eventhandler.SubscribeEvent;\r\nimport net.minecraftforge.fml.relauncher.Side;\r\nimport net.minecraftforge.fml.relauncher.SideOnly;\r\nimport oguro.fffm.FFFMRef;\r\nimport oguro.fffm.block.BlockApricotTree;\r\nimport oguro.fffm.block.BlockFruitTree;\r\n\r\npublic class FFFMBlocks\r\n{\r\n    \/\/\u767b\u9332\u3059\u308b\u30d6\u30ed\u30c3\u30af\u3092\u5ba3\u8a00\r\n    public static BlockFruitTree APRICOT_TREE;\r\n\r\n    \/\/\u30d6\u30ed\u30c3\u30af\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u751f\u6210\r\n    public static void init()\r\n    {\r\n        APRICOT_TREE = (BlockFruitTree) new BlockApricotTree().setRegistryName(\"apricot_tree\")\r\n                .setUnlocalizedName(\"apricot_tree\");\r\n    }\r\n\r\n\r\n    \/\/\u30d6\u30ed\u30c3\u30af\u3092\u767b\u9332\u3059\u308b\r\n    public static void register()\r\n    {\r\n        registerBlock(APRICOT_TREE);\r\n    }\r\n\r\n\r\n    \/\/\u30d6\u30ed\u30c3\u30af\u306e\u767b\u9332\r\n    public static void registerBlock(Block block)\r\n    {\r\n        registerBlock(block, new ItemBlock(block));\r\n    }\r\n\r\n    \/\/\u30a2\u30a4\u30c6\u30e0\u30d6\u30ed\u30c3\u30af\u306e\u767b\u9332\r\n    public static void registerBlock(Block block, ItemBlock item)\r\n    {\r\n        RegistrationHandler.BLOCKS.add(block);\r\n        item.setRegistryName(block.getRegistryName());\r\n        FFFMItems.RegistrationHandler.ITEMS.add(item);\r\n    }\r\n\r\n    \/\/\u30a2\u30a4\u30c6\u30e0\u30d6\u30ed\u30c3\u30af\u306e\u63cf\u753b\u3092\u767b\u9332\u3059\u308b\r\n    public static void registerRenders()\r\n    {\r\n        registerRender(APRICOT_TREE);\r\n    }\r\n\r\n    @SideOnly(Side.CLIENT)\r\n    private static void registerRender(Block block)\r\n    {\r\n        ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0,\r\n                new ModelResourceLocation(block.getRegistryName(),\"inventory\"));\r\n    }\r\n\r\n    \/\/\u5185\u90e8\u30af\u30e9\u30b9\u3067\u30d6\u30ed\u30c3\u30af\u3092\u767b\u9332\u3059\u308b\r\n    @Mod.EventBusSubscriber(modid = FFFMRef.MODID)\r\n    public static class RegistrationHandler {\r\n\r\n        public static final List&lt;Block&gt; BLOCKS = new LinkedList&lt;&gt;();\r\n\r\n        @SubscribeEvent\r\n        public static void registerItems(final RegistryEvent.Register&lt;Block&gt; event) {\r\n\r\n            FFFMBlocks.init();\r\n            FFFMBlocks.register();\r\n            BLOCKS.stream().forEach(block -&gt; event.getRegistry().register(block));\r\n        }\r\n    }\r\n}\r\n<\/code><\/pre>\n<h4>BlockFruitTree.java \u4ee3\u7801\u5757<\/p>\n<pre class=\"post-pre\"><code>package oguro.fffm.block;\r\n\r\nimport java.util.Random;\r\n\r\nimport net.minecraft.block.Block;\r\nimport net.minecraft.block.BlockBush;\r\nimport net.minecraft.block.IGrowable;\r\nimport net.minecraft.block.SoundType;\r\nimport net.minecraft.block.properties.IProperty;\r\nimport net.minecraft.block.properties.PropertyInteger;\r\nimport net.minecraft.block.state.BlockStateContainer;\r\nimport net.minecraft.block.state.IBlockState;\r\nimport net.minecraft.creativetab.CreativeTabs;\r\nimport net.minecraft.entity.player.EntityPlayer;\r\nimport net.minecraft.init.Blocks;\r\nimport net.minecraft.init.Items;\r\nimport net.minecraft.init.SoundEvents;\r\nimport net.minecraft.item.Item;\r\nimport net.minecraft.item.ItemStack;\r\nimport net.minecraft.util.EnumFacing;\r\nimport net.minecraft.util.EnumHand;\r\nimport net.minecraft.util.SoundCategory;\r\nimport net.minecraft.util.math.AxisAlignedBB;\r\nimport net.minecraft.util.math.BlockPos;\r\nimport net.minecraft.util.math.MathHelper;\r\nimport net.minecraft.world.IBlockAccess;\r\nimport net.minecraft.world.World;\r\nimport oguro.fffm.init.FFFMItems;\r\n\r\n\/\/BlockCrops\u3092\u6539\u9020\u3057\u3064\u30641.14.4\u306eSweetBerryBushBlock\u304b\u3089\u679c\u7269\u5165\u624b\u3042\u305f\u308a\u306e\u51e6\u7406\u3092\u30d1\u30af\u3063\u3066\u304d\u305f\u3002\r\n\/\/\u65b0\u3057\u3044\u30d5\u30eb\u30fc\u30c4\u3092\u8ffd\u52a0\u3059\u308b\u3068\u304d\u306f\u3001\u3053\u306e\u30af\u30e9\u30b9\u3092\u7d99\u627f\u3057\u3066\u30c9\u30ed\u30c3\u30d7\u3059\u308b\u30a2\u30a4\u30c6\u30e0\u306a\u3069\u306e\u5909\u6570\u3092\u66f8\u304d\u63db\u3048\u308b\u3053\u3068\u306b\u3059\u308b\u3002\r\npublic class BlockFruitTree\r\nextends BlockBush\r\nimplements IGrowable\r\n{\r\n    \/\/\u4f5c\u7269\u306e\u6210\u9577\u6bb5\u968e\u3092\u4f5c\u308b\u3002\u3053\u3053\u3067\u306f0\u304b\u30893\u306e4\u6bb5\u968e\u3002\r\n    public static final PropertyInteger AGE = PropertyInteger.create(\"age\", 0, 3);\r\n\r\n    protected BlockFruitTree()\r\n    {\r\n        this.setDefaultState(this.blockState.getBaseState().withProperty(this.getAgeProperty(), Integer.valueOf(0)));\r\n        this.setTickRandomly(true);\r\n        this.setCreativeTab((CreativeTabs)null);\r\n        this.setHardness(0.0F);\r\n        this.setSoundType(SoundType.PLANT);\r\n        this.disableStats();\r\n    }\r\n\r\n\r\n    public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)\r\n    {\r\n        return FULL_BLOCK_AABB;\r\n    }\r\n    \/\/\u6210\u9577\u306b\u95a2\u3059\u308b\u8a18\u8ff0\r\n    protected boolean canSustainBush(IBlockState state)\r\n    {\r\n        \/\/\u8a2d\u7f6e\u53ef\u80fd(\u4f5c\u4ed8\u3051\u53ef\u80fd)\u306a\u30d6\u30ed\u30c3\u30af\r\n        \/\/BlockFruitTree\u3067\u306f\u300c\u8015\u5730(FARMLAND)\u300d\u3001\u300c\u8349\u30d6\u30ed\u30c3\u30af(GRASS)\u300d\u3001\u300c\u571f(DIRT)\u300d\u306e\u4e0a\u306b\u690d\u3048\u3089\u308c\u308b\u3088\u3046\u306b\u3057\u305f\u3002\r\n        return state.getBlock() == Blocks.FARMLAND ||\r\n                state.getBlock() == Blocks.GRASS ||\r\n                state.getBlock() == Blocks.DIRT;\r\n    }\r\n\r\n    protected PropertyInteger getAgeProperty()\r\n    {\r\n        return AGE;\r\n    }\r\n\r\n    public int getMaxAge()\r\n    {\r\n        \/\/\u6700\u5927\u6210\u9577\u6bb5\u968e\u306f\u4eca\u56de\u306f3\r\n        return 3;\r\n    }\r\n\r\n    protected int getAge(IBlockState state)\r\n    {\r\n        return ((Integer)state.getValue(this.getAgeProperty())).intValue();\r\n    }\r\n\r\n    public IBlockState withAge(int age)\r\n    {\r\n        return this.getDefaultState().withProperty(this.getAgeProperty(), Integer.valueOf(age));\r\n    }\r\n\r\n    public boolean isMaxAge(IBlockState state)\r\n    {\r\n        return ((Integer)state.getValue(this.getAgeProperty())).intValue() &gt;= this.getMaxAge();\r\n    }\r\n\r\n    public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)\r\n    {\r\n        super.updateTick(worldIn, pos, state, rand);\r\n\r\n        if (!worldIn.isAreaLoaded(pos, 1)) return; \/\/ Forge: prevent loading unloaded chunks when checking neighbor's light\r\n        if (worldIn.getLightFromNeighbors(pos.up()) &gt;= 9)\r\n        {\r\n            int i = this.getAge(state);\r\n\r\n            if (i &lt; this.getMaxAge())\r\n            {\r\n                float f = getGrowthChance(this, worldIn, pos);\r\n\r\n                if(net.minecraftforge.common.ForgeHooks.onCropsGrowPre(worldIn, pos, state, rand.nextInt((int)(25.0F \/ f) + 1) == 0))\r\n                {\r\n                    worldIn.setBlockState(pos, this.withAge(i + 1), 2);\r\n                    net.minecraftforge.common.ForgeHooks.onCropsGrowPost(worldIn, pos, state, worldIn.getBlockState(pos));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public void grow(World worldIn, BlockPos pos, IBlockState state)\r\n    {\r\n        int i = this.getAge(state) + this.getBonemealAgeIncrease(worldIn);\r\n        int j = this.getMaxAge();\r\n\r\n        if (i &gt; j)\r\n        {\r\n            i = j;\r\n        }\r\n\r\n        worldIn.setBlockState(pos, this.withAge(i), 2);\r\n    }\r\n\r\n    protected int getBonemealAgeIncrease(World worldIn)\r\n    {\r\n        return MathHelper.getInt(worldIn.rand, 2, 5);\r\n    }\r\n\r\n    protected static float getGrowthChance(Block blockIn, World worldIn, BlockPos pos)\r\n    {\r\n        float f = 4.0F;\r\n        BlockPos blockpos = pos.down();\r\n\r\n        for (int i = -1; i &lt;= 1; ++i)\r\n        {\r\n            for (int j = -1; j &lt;= 1; ++j)\r\n            {\r\n                float f1 = 0.0F;\r\n                IBlockState iblockstate = worldIn.getBlockState(blockpos.add(i, 0, j));\r\n\r\n                if (iblockstate.getBlock().canSustainPlant(iblockstate, worldIn, blockpos.add(i, 0, j), net.minecraft.util.EnumFacing.UP, (net.minecraftforge.common.IPlantable)blockIn))\r\n                {\r\n                    f1 = 4.0F;\r\n\r\n                    if (iblockstate.getBlock().isFertile(worldIn, blockpos.add(i, 0, j)))\r\n                    {\r\n                        f1 = 5.2F;\r\n                    }\r\n                }\r\n\r\n                if (i != 0 || j != 0)\r\n                {\r\n                    f1 \/= 6.0F;\r\n                }\r\n\r\n                f += f1;\r\n            }\r\n        }\r\n\r\n        BlockPos blockpos1 = pos.north();\r\n        BlockPos blockpos2 = pos.south();\r\n        BlockPos blockpos3 = pos.west();\r\n        BlockPos blockpos4 = pos.east();\r\n        boolean flag = blockIn == worldIn.getBlockState(blockpos3).getBlock() || blockIn == worldIn.getBlockState(blockpos4).getBlock();\r\n        boolean flag1 = blockIn == worldIn.getBlockState(blockpos1).getBlock() || blockIn == worldIn.getBlockState(blockpos2).getBlock();\r\n\r\n        if (flag &amp;&amp; flag1)\r\n        {\r\n            f \/= 2.0F;\r\n        }\r\n        else\r\n        {\r\n            boolean flag2 = blockIn == worldIn.getBlockState(blockpos3.north()).getBlock() || blockIn == worldIn.getBlockState(blockpos4.north()).getBlock() || blockIn == worldIn.getBlockState(blockpos4.south()).getBlock() || blockIn == worldIn.getBlockState(blockpos3.south()).getBlock();\r\n\r\n            if (flag2)\r\n            {\r\n                f \/= 4.8F;\r\n            }\r\n        }\r\n\r\n        return f;\r\n    }\r\n\r\n    \/\/\u7834\u58ca\u3057\u305f\u3068\u304d\u306b\u843d\u3068\u3059\u300c\u82d7\u30a2\u30a4\u30c6\u30e0\u300d\u306e\u8a2d\u5b9a\r\n    \/\/\u3053\u306e\u30af\u30e9\u30b9\u306f\u3069\u306e\u679c\u6a39\u304b\u3089\u3082\u76f4\u63a5\u547c\u3073\u51fa\u3055\u308c\u306a\u3044\u4e88\u5b9a\u306a\u306e\u3067\u3068\u308a\u3042\u3048\u305a\u3042\u3093\u305a\u306e\u82d7\u306b\u3057\u3066\u304a\u304f\u3002\r\n    protected Item getSapling()\r\n    {\r\n        return FFFMItems.APRICOT_TREE_SAPLING;\r\n    }\r\n\r\n  \/\/\u7834\u58ca\u3057\u305f\u3068\u304d\u306b\u843d\u3068\u3059\u300c\u679c\u7269\u300d\u3068\u305d\u306e\u500b\u6570\u306e\u8a2d\u5b9a\r\n    \/\/\u3053\u306e\u30af\u30e9\u30b9\u306f\u3069\u306e\u679c\u6a39\u304b\u3089\u3082\u76f4\u63a5\u547c\u3073\u51fa\u3055\u308c\u306a\u3044\u4e88\u5b9a\u306a\u306e\u3067\u3068\u308a\u3042\u3048\u305a\u3042\u3093\u305a\u30922\u500b\u306b\u3057\u3066\u304a\u304f\u3002\r\n    protected Item getFruit()\r\n    {\r\n        return Items.APRICOT;\r\n    }\r\n\r\n    protected int getHowManyPickUp()\r\n    {\r\n        return 2;\r\n    }\r\n\r\n    \/\/\u30c9\u30ed\u30c3\u30d7\u3059\u308b\u3088\u3046\u306b\u3059\u308b\r\n    public Item getItemDropped(IBlockState state, Random rand, int fortune)\r\n    {\r\n        return this.getSapling();\r\n    }\r\n\r\n    public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state)\r\n    {\r\n        return new ItemStack(this.getSapling());\r\n    }\r\n\r\n    public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)\r\n    {\r\n        int i = this.getAge(state);\r\n        boolean flag = i == 3;\r\n        if (!flag &amp;&amp; playerIn.getHeldItem(hand).getItem() == Items.DYE) {\r\n           return false;\r\n        }\r\n      \/\/age=2(\u6e96\u6700\u5927\u6210\u9577)\u306e\u3068\u304d\u306b\u53ce\u7a6b\u3059\u308b\u51e6\u7406\r\n        else if (i == 2)\r\n        {\r\n           \/\/\u53ce\u7a6b\u3067\u304d\u308b\u500b\u6570\r\n           \/\/getHowManyPickUp\u3067\u8a2d\u5b9a\u3057\u305f\u53ce\u7a6b\u500b\u6570\u3060\u3051\u53ce\u7a6b\u3067\u304d\u308b\u8a2d\u5b9a\u306b\u3057\u3066\u3042\u308b\u3002\r\n           int j = getHowManyPickUp();\r\n           spawnAsEntity(worldIn, pos, new ItemStack(getFruit(), j + (flag ? 1 : 0)));\r\n           \/\/\u53ce\u7a6b\u6642\u306b\u9cf4\u3089\u3059\u97f3\r\n           \/\/\u65b0\u3057\u3044\u97f3\u3092\u8ffd\u52a0\u305b\u305a\u306b\u300c\u984d\u7e01\u304b\u3089\u30a2\u30a4\u30c6\u30e0\u3092\u5265\u304e\u53d6\u308b\u97f3\u300d\u306b\u3057\u305f\u3002\r\n           worldIn.playSound((EntityPlayer)null, pos, SoundEvents.ENTITY_ITEMFRAME_REMOVE_ITEM, SoundCategory.BLOCKS, 1.0F, 0.8F + worldIn.rand.nextFloat() * 0.4F);\r\n           worldIn.setBlockState(pos, this.withAge(Integer.valueOf(0)), 2);\r\n           return true;\r\n        }\r\n        \/\/age=3(\u6700\u5927\u6210\u9577)\u306e\u3068\u304d\u306b\u53ce\u7a6b\u3059\u308b\u51e6\u7406\r\n        else if (i == 3)\r\n        {\r\n           \/\/\u53ce\u7a6b\u3067\u304d\u308b\u500b\u6570\r\n           \/\/getHowManyPickUp\u3067\u8a2d\u5b9a\u3057\u305f\u53ce\u7a6b\u500b\u6570\u306e2\u500d\u3092\u53ce\u7a6b\u3067\u304d\u308b\u8a2d\u5b9a\u306b\u3057\u3066\u3042\u308b\u3002\r\n           int j = getHowManyPickUp() * 2;\r\n           spawnAsEntity(worldIn, pos, new ItemStack(getFruit(), j + (flag ? 1 : 0)));\r\n           \/\/\u53ce\u7a6b\u6642\u306b\u9cf4\u3089\u3059\u97f3\r\n           \/\/\u65b0\u3057\u3044\u97f3\u3092\u8ffd\u52a0\u305b\u305a\u306b\u300c\u984d\u7e01\u304b\u3089\u30a2\u30a4\u30c6\u30e0\u3092\u5265\u304e\u53d6\u308b\u97f3\u300d\u306b\u3057\u305f\u3002\r\n           worldIn.playSound((EntityPlayer)null, pos, SoundEvents.ENTITY_ITEMFRAME_REMOVE_ITEM, SoundCategory.BLOCKS, 1.0F, 0.8F + worldIn.rand.nextFloat() * 0.4F);\r\n           worldIn.setBlockState(pos, this.withAge(Integer.valueOf(0)), 2);\r\n           return true;\r\n        }\r\n        \/\/age=2\u306b\u6e80\u305f\u306a\u3044\u3068\u304d\u306f\u300c\u53ce\u7a6b\u3057\u306a\u3044\u51e6\u7406\r\n        else\r\n        {\r\n           return super.onBlockActivated(worldIn, pos, state, playerIn, hand, facing, hitX, hitY, hitZ);\r\n        }\r\n     }\r\n\r\n    \/\/IGrowable\u306b\u95a2\u3059\u308b\u8a18\u8ff0\r\n    @Override\r\n    public boolean canGrow(World worldIn, BlockPos pos, IBlockState state, boolean isClient)\r\n    {\r\n        return !this.isMaxAge(state);\r\n    }\r\n\r\n    @Override\r\n    public boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos, IBlockState state)\r\n    {\r\n        return true;\r\n    }\r\n\r\n    @Override\r\n    public void grow(World worldIn, Random rand, BlockPos pos, IBlockState state)\r\n    {\r\n        this.grow(worldIn, pos, state);\r\n    }\r\n\r\n    \/\/\u6210\u9577\u6bb5\u968e\u3054\u3068\u306e\u30d6\u30ed\u30c3\u30af\u3092\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u7570\u306a\u308b\u30d6\u30ed\u30c3\u30af\u3068\u3057\u3066\u7ba1\u7406\r\n    public IBlockState getStateFromMeta(int meta)\r\n    {\r\n        return this.withAge(meta);\r\n    }\r\n    public int getMetaFromState(IBlockState state)\r\n    {\r\n        return this.getAge(state);\r\n    }\r\n\r\n    protected BlockStateContainer createBlockState()\r\n    {\r\n        return new BlockStateContainer(this, new IProperty[] {AGE});\r\n    }\r\n}\r\n<\/code><\/pre>\n<h4>\u6321\u4f4f\u674f\u6811.java<\/p>\n<pre class=\"post-pre\"><code>package oguro.fffm.block;\r\n\r\nimport net.minecraft.item.Item;\r\nimport oguro.fffm.init.FFFMItems;\r\n\r\npublic class BlockApricotTree\r\nextends BlockFruitTree\r\n{\r\n    \/\/\u82d7\u30a2\u30a4\u30c6\u30e0\u3092\u8a2d\u5b9a\r\n\r\n    protected Item getSapling()\r\n    {\r\n        return FFFMItems.APRICOT_TREE_SAPLING;\r\n    }\r\n\r\n    \/\/\u679c\u7269\u30a2\u30a4\u30c6\u30e0\u3092\u8a2d\u5b9a\r\n\r\n    protected Item getFruit()\r\n    {\r\n        return FFFMItems.APRICOT;\r\n    }\r\n\r\n    \/\/\u53ce\u7a6b\u3067\u304d\u308b\u500b\u6570\u3092\u8a2d\u5b9a\r\n\r\n    protected int getHowManyPickUp()\r\n    {\r\n        return 2;\r\n    }\r\n}\r\n<\/code><\/pre>\n<h4>ItemFruit.java<\/p>\n<pre class=\"post-pre\"><code>package oguro.fffm.item;\r\n\r\nimport net.minecraft.entity.player.EntityPlayer;\r\nimport net.minecraft.item.EnumAction;\r\nimport net.minecraft.item.ItemFood;\r\nimport net.minecraft.item.ItemStack;\r\nimport net.minecraft.util.ActionResult;\r\nimport net.minecraft.util.EnumActionResult;\r\nimport net.minecraft.util.EnumHand;\r\nimport net.minecraft.world.World;\r\nimport oguro.fffm.creativetab.FFFMCreativeTabs;\r\n\r\npublic class ItemFruit\r\nextends ItemFood\r\n{\r\n\r\n    \/\/\u6e80\u8179\u5ea6\u56de\u5fa9\u91cf\r\n    protected static int getHealAmount()\r\n    {\r\n        return 5;\r\n    }\r\n\r\n    \/\/\u30aa\u30aa\u30ab\u30df\u304c\u98df\u3079\u308b\u304b\u3069\u3046\u304b\r\n    protected static boolean canWolfEat()\r\n    {\r\n        return false;\r\n    }\r\n\r\n    \/\/\u98df\u3079\u308b\u306e\u306b\u304b\u304b\u308b\u6642\u9593\r\n    protected int getEatTime()\r\n    {\r\n        return 32;\r\n    }\r\n\r\n    \/\/\u98df\u3079\u308b\u3068\u304d\u306e\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\r\n    \/\/\u30c7\u30d5\u30a9\u30eb\u30c8\u3067EAT\r\n    public EnumAction getItemUseAction(ItemStack stack)\r\n    {\r\n        return EnumAction.EAT;\r\n    }\r\n\r\n    \/\/\u6e80\u8179\u3067\u3082\u98df\u3079\u3089\u308c\u308b\u304b\r\n    \/\/\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u3044\u3044\u3048\r\n    protected boolean canEatAlways()\r\n    {\r\n        return false;\r\n    }\r\n\r\n\r\n    public ItemFruit()\r\n    {\r\n        super(getHealAmount(), canWolfEat());\r\n        this.setCreativeTab(FFFMCreativeTabs.FFFM_FRUIT);\r\n    }\r\n\r\n    public int getMaxItemUseDuration(ItemStack stack)\r\n    {\r\n        return getEatTime();\r\n    }\r\n\r\n\r\n    public ActionResult&lt;ItemStack&gt; onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn)\r\n    {\r\n        ItemStack itemstack = playerIn.getHeldItem(handIn);\r\n\r\n        if (playerIn.canEat(canEatAlways()))\r\n        {\r\n            playerIn.setActiveHand(handIn);\r\n            return new ActionResult&lt;ItemStack&gt;(EnumActionResult.SUCCESS, itemstack);\r\n        }\r\n        else\r\n        {\r\n            return new ActionResult&lt;ItemStack&gt;(EnumActionResult.FAIL, itemstack);\r\n        }\r\n    }\r\n}\r\n\r\n<\/code><\/pre>\n<h4>\u9879\u76ee\u674f\u5b50.java<\/p>\n<pre class=\"post-pre\"><code>package oguro.fffm.item;\r\n\r\nimport net.minecraft.entity.player.EntityPlayer;\r\nimport net.minecraft.item.EnumAction;\r\nimport net.minecraft.item.ItemFood;\r\nimport net.minecraft.item.ItemStack;\r\nimport net.minecraft.util.ActionResult;\r\nimport net.minecraft.util.EnumActionResult;\r\nimport net.minecraft.util.EnumHand;\r\nimport net.minecraft.world.World;\r\nimport oguro.fffm.creativetab.FFFMCreativeTabs;\r\n\r\npublic class ItemFruit\r\nextends ItemFood\r\n{\r\n\r\n    \/\/\u6e80\u8179\u5ea6\u56de\u5fa9\u91cf\r\n    protected static int getHealAmount()\r\n    {\r\n        return 5;\r\n    }\r\n\r\n    \/\/\u30aa\u30aa\u30ab\u30df\u304c\u98df\u3079\u308b\u304b\u3069\u3046\u304b\r\n    protected static boolean canWolfEat()\r\n    {\r\n        return false;\r\n    }\r\n\r\n    \/\/\u98df\u3079\u308b\u306e\u306b\u304b\u304b\u308b\u6642\u9593\r\n    protected int getEatTime()\r\n    {\r\n        return 32;\r\n    }\r\n\r\n    \/\/\u98df\u3079\u308b\u3068\u304d\u306e\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\r\n    \/\/\u30c7\u30d5\u30a9\u30eb\u30c8\u3067EAT\r\n    public EnumAction getItemUseAction(ItemStack stack)\r\n    {\r\n        return EnumAction.EAT;\r\n    }\r\n\r\n    \/\/\u6e80\u8179\u3067\u3082\u98df\u3079\u3089\u308c\u308b\u304b\r\n    \/\/\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u3044\u3044\u3048\r\n    protected boolean canEatAlways()\r\n    {\r\n        return false;\r\n    }\r\n\r\n\r\n    public ItemFruit()\r\n    {\r\n        super(getHealAmount(), canWolfEat());\r\n        this.setCreativeTab(FFFMCreativeTabs.FFFM_FRUIT);\r\n    }\r\n\r\n    public int getMaxItemUseDuration(ItemStack stack)\r\n    {\r\n        return getEatTime();\r\n    }\r\n\r\n\r\n    public ActionResult&lt;ItemStack&gt; onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn)\r\n    {\r\n        ItemStack itemstack = playerIn.getHeldItem(handIn);\r\n\r\n        if (playerIn.canEat(canEatAlways()))\r\n        {\r\n            playerIn.setActiveHand(handIn);\r\n            return new ActionResult&lt;ItemStack&gt;(EnumActionResult.SUCCESS, itemstack);\r\n        }\r\n        else\r\n        {\r\n            return new ActionResult&lt;ItemStack&gt;(EnumActionResult.FAIL, itemstack);\r\n        }\r\n    }\r\n}\r\n<\/code><\/pre>\n<h4>\u7269\u54c1\u82d7\u6728.java<\/p>\n<pre class=\"post-pre\"><code>package oguro.fffm.item;\r\n\r\nimport net.minecraft.advancements.CriteriaTriggers;\r\nimport net.minecraft.block.Block;\r\nimport net.minecraft.entity.player.EntityPlayer;\r\nimport net.minecraft.entity.player.EntityPlayerMP;\r\nimport net.minecraft.item.Item;\r\nimport net.minecraft.item.ItemStack;\r\nimport net.minecraft.util.EnumActionResult;\r\nimport net.minecraft.util.EnumFacing;\r\nimport net.minecraft.util.EnumHand;\r\nimport net.minecraft.util.math.BlockPos;\r\nimport net.minecraft.world.World;\r\nimport net.minecraftforge.common.IPlantable;\r\nimport oguro.fffm.block.BlockFruitTree;\r\nimport oguro.fffm.creativetab.FFFMCreativeTabs;\r\nimport oguro.fffm.init.FFFMBlocks;\r\n\r\n\/\/\u30d0\u30cb\u30e9\u306eItemSeed\u3092\u5f15\u3063\u5f35\u3063\u3066\u304d\u305f\u3063\u307d\u3044(\u899a\u3048\u3066\u306a\u3044)\u3002\r\n\/\/\u65b0\u3057\u3044\u30d5\u30eb\u30fc\u30c4\u3092\u8ffd\u52a0\u3059\u308b\u3068\u304d\u306f\u3001\u3053\u306e\u30af\u30e9\u30b9\u3092\u7d99\u627f\u3057\u3066\u690d\u3048\u308b\u679c\u6a39\u306a\u3069\u306e\u5909\u6570\u3092\u66f8\u304d\u63db\u3048\u308b\u3053\u3068\u306b\u3059\u308b\u3002\r\npublic class ItemSapling\r\nextends Item\r\nimplements IPlantable\r\n{\r\n    private final BlockFruitTree crops;\r\n    protected Block getTree()\r\n    {\r\n        \/\/\u690d\u3048\u308b\u679c\u6a39\r\n        \/\/\u3053\u306e\u30af\u30e9\u30b9\u306f\u3069\u306e\u679c\u6a39\u304b\u3089\u3082\u76f4\u63a5\u547c\u3073\u51fa\u3055\u308c\u306a\u3044\u4e88\u5b9a\u306a\u306e\u3067\u3068\u308a\u3042\u3048\u305a\u3042\u3093\u305a\u306e\u6728\u306b\u3057\u3066\u304a\u304f\u3002\r\n        return FFFMBlocks.APRICOT_TREE;\r\n    }\r\n\r\n\r\n    public ItemSapling(BlockFruitTree fruit_tree)\r\n    {\r\n        this.crops = (BlockFruitTree) this.getTree();\r\n        \/\/\u30af\u30ea\u30a8\u30a4\u30c6\u30a3\u30d6\u30bf\u30d6\r\n        \/\/\u79c1\u306f\u65b0\u3057\u304f\u300cFFFM_SAPLING\u300d\u3068\u3044\u3046\u30af\u30ea\u30a8\u30a4\u30c6\u30a3\u30d6\u30bf\u30d6\u3092\u4f5c\u3063\u3066\u305d\u3053\u306b\u5165\u308c\u305f\u3002\r\n        \/\/\u30d0\u30cb\u30e9\u306e\u30af\u30ea\u30a8\u30a4\u30c6\u30a3\u30d6\u30bf\u30d6\u3092\u305d\u306e\u307e\u307e\u4f7f\u3046\u306a\u3089this.setCreativeTab(CreativeTabs.FOOD);\u3068\u304b\r\n        this.setCreativeTab(FFFMCreativeTabs.FFFM_SAPLINGS);\r\n    }\r\n\r\n    public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)\r\n    {\r\n        ItemStack itemstack = player.getHeldItem(hand);\r\n        net.minecraft.block.state.IBlockState state = worldIn.getBlockState(pos);\r\n        if (facing == EnumFacing.UP &amp;&amp; player.canPlayerEdit(pos.offset(facing), facing, itemstack) &amp;&amp; state.getBlock().canSustainPlant(state, worldIn, pos, EnumFacing.UP, (IPlantable) this) &amp;&amp; worldIn.isAirBlock(pos.up()))\r\n        {\r\n            worldIn.setBlockState(pos.up(), this.crops.getDefaultState());\r\n\r\n            if (player instanceof EntityPlayerMP)\r\n            {\r\n                CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, pos.up(), itemstack);\r\n            }\r\n\r\n            itemstack.shrink(1);\r\n            return EnumActionResult.SUCCESS;\r\n        }\r\n        else\r\n        {\r\n            return EnumActionResult.FAIL;\r\n        }\r\n    }\r\n\r\n    @Override\r\n    public net.minecraftforge.common.EnumPlantType getPlantType(net.minecraft.world.IBlockAccess world, BlockPos pos)\r\n    {\r\n        return net.minecraftforge.common.EnumPlantType.Plains;\r\n    }\r\n\r\n    @Override\r\n    public net.minecraft.block.state.IBlockState getPlant(net.minecraft.world.IBlockAccess world, BlockPos pos)\r\n    {\r\n        return this.crops.getDefaultState();\r\n    }\r\n\r\n}\r\n<\/code><\/pre>\n<h4>\u9879\u76ee\u674f\u6811\u5e7c\u82d7.java<\/p>\n<pre class=\"post-pre\"><code>package oguro.fffm.item;\r\n\r\nimport net.minecraft.block.Block;\r\nimport oguro.fffm.block.BlockFruitTree;\r\nimport oguro.fffm.init.FFFMBlocks;\r\n\r\npublic class ItemApricotTreeSapling extends ItemSapling {\r\n\r\n    public ItemApricotTreeSapling(BlockFruitTree fruit_tree) {\r\n        super(fruit_tree);\r\n    }\r\n\r\n        \/\/\u690d\u3048\u308b\u679c\u6a39\r\n    @Override\r\n    protected Block getTree()\r\n    {\r\n        return FFFMBlocks.APRICOT_TREE;\r\n    }\r\n\r\n}\r\n<\/code><\/pre>\n<h3>json\u7684\u6e90\u4ee3\u7801\u5982\u679c\u5728JSON\u548c\u7c7b\u7684\u78b0\u649e\u68c0\u6d4b\u4e0a\u505a\u4e00\u4e9b\u8c03\u6574\uff0c\u4e5f\u8bb8\u53ef\u4ee5\u5c06\u9ad8\u5ea6\u53d8\u4e3a2\u4e2a\u5757\u3002<\/p>\n<h4>\u674f\u5b50.json .json)<\/p>\n<pre class=\"post-pre\"><code>{\r\n    \"parent\": \"item\/generated\",\r\n    \"textures\": {\r\n        \"layer0\": \"fffm:items\/apricot\"\r\n    }\r\n}\r\n<\/code><\/pre>\n<h4>\u674f\u6811\u82d7.json<\/p>\n<pre class=\"post-pre\"><code>{\r\n    \"parent\": \"item\/generated\",\r\n    \"textures\": {\r\n        \"layer0\": \"fffm:blocks\/apricot_tree_sapling\"\r\n    }\r\n}\r\n<\/code><\/pre>\n<h4>\u674f\u6811.json<\/p>\n<pre class=\"post-pre\"><code>{\r\n    \"variants\": {\r\n        \"age=0\": { \"model\": \"fffm:apricot_tree_stage0\" },\r\n        \"age=1\": { \"model\": \"fffm:apricot_tree_stage1\" },\r\n        \"age=2\": { \"model\": \"fffm:apricot_tree_stage2\" },\r\n        \"age=3\": { \"model\": \"fffm:apricot_tree_stage3\" }\r\n    }\r\n}\r\n<\/code><\/pre>\n<h4>\u674f\u6811\u9636\u6bb5\u25ef.json\u8bf7\u5e2e\u6211\u4fee\u6539\u25ef\u91cc\u9762\u7684\u6570\u5b57<\/p>\n<pre class=\"post-pre\"><code>{\r\n    \"parent\": \"block\/cross\",\r\n    \"textures\": {\r\n        \"cross\": \"fffm:blocks\/apricot_tree_stage\u25ef\"\r\n    }\r\n}\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u6211\u5728Minecraft 1.12.2\u4e2d\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u672c\u4e2d\u7684\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\uff08\u793a\u4f8b\u4ee3\u7801\uff09\u7684\u5907\u5fd8\u5f55\u3002\u521b\u5efa\u4e00 [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[227],"class_list":["post-27486","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-227"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09 - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"\u5173\u4e8e\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09\u7684\u6280\u672f\u6587\u7ae0\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728minecraft1-12-2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1-14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09\" \/>\n<meta property=\"og:description\" content=\"\u5173\u4e8e\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09\u7684\u6280\u672f\u6587\u7ae0\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728minecraft1-12-2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1-14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-03T17:27:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-11T18:59:08+00:00\" \/>\n<meta name=\"author\" content=\"\u6e05, \u5b87\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u5b87\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94\/\",\"name\":\"\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-11-03T17:27:53+00:00\",\"dateModified\":\"2025-08-11T18:59:08+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\"},\"description\":\"\u5173\u4e8e\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09\u7684\u6280\u672f\u6587\u7ae0\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\",\"name\":\"\u6e05, \u5b87\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u5b87\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09 - Blog - Silicon Cloud","description":"\u5173\u4e8e\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09\u7684\u6280\u672f\u6587\u7ae0","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728minecraft1-12-2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1-14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09","og_description":"\u5173\u4e8e\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09\u7684\u6280\u672f\u6587\u7ae0","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728minecraft1-12-2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1-14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-11-03T17:27:53+00:00","article_modified_time":"2025-08-11T18:59:08+00:00","author":"\u6e05, \u5b87","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u5b87","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"1 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94\/","name":"\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-11-03T17:27:53+00:00","dateModified":"2025-08-11T18:59:08+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e"},"description":"\u5173\u4e8e\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09\u7684\u6280\u672f\u6587\u7ae0","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5728Minecraft1.12.2\u4e2d\uff0c\u6dfb\u52a0\u4e86\u7c7b\u4f3c\u4e8e1.14\u7248\u751c\u6d46\u679c\u7684\u690d\u7269\u65b9\u5757\u7684\u7b14\u8bb0\uff08\u6837\u4f8b\u4ee3\u7801\uff09"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e","name":"\u6e05, \u5b87","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","caption":"\u6e05, \u5b87"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8minecraft1-12-2%e4%b8%ad%ef%bc%8c%e6%b7%bb%e5%8a%a0%e4%ba%86%e7%b1%bb%e4%bc%bc%e4%ba%8e1-14%e7%89%88%e7%94%9c%e6%b5%86%e6%9e%9c%e7%9a%84%e6%a4%8d%e7%89%a9%e6%96%b9%e5%9d%97%e7%9a%84%e7%ac%94\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/27486","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=27486"}],"version-history":[{"count":3,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/27486\/revisions"}],"predecessor-version":[{"id":111134,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/27486\/revisions\/111134"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=27486"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=27486"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=27486"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}