zh_cn:tutorial:blockstate
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
zh_cn:tutorial:blockstate [2021/01/16 07:00] – [关于性能的注意事项] solidblock | zh_cn:tutorial:blockstate [2023/11/18 08:13] (current) – [为方块状态添加模型] update wiki link solidblock | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== |
- | Minecraft中的每种类型的方块都由一个单独的'' | + | Minecraft 中的每种类型的方块都由一个单独的 '' |
+ | |||
+ | 这就是 '' | ||
| | ||
- | 首先,我们定义方块的boolean属性-是否坚硬(小心不要导入错误的BooleanProperty!): | + | 首先,我们定义方块的布尔值属性——是否充能(小心不要导入错误的 |
+ | |||
+ | 事实上你也可以使用原版已有的属性,可以在 '' | ||
<code java> | <code java> | ||
- | public class MyBlock | + | public class ChargeableBlock |
- | public static final BooleanProperty | + | public static final BooleanProperty |
+ | |||
+ | // 方块实例。可以放在任何地方。确保这个类已经初始化。 | ||
+ | public static final ChargeableBlock CHARGEABLE_BLOCK = new ChargeableBlock(FabricBlockSettings.copyOf(Blocks.STONE)); | ||
} | } | ||
</ | </ | ||
- | 然后,我们需要通过覆盖'' | ||
<code java> | <code java> | ||
- | public class MyBlock | + | public class ExampleMod implements ModInitializer { |
+ | @Override | ||
+ | public void onInitialize() { | ||
+ | Registry.register(Registries.BLOCK, | ||
+ | Registry.register(Registries.ITEM, | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 然后,我们需要通过覆盖 '' | ||
+ | |||
+ | <code java> | ||
+ | public class ChargeableBlock | ||
[...] | [...] | ||
@Override | @Override | ||
- | protected void appendProperties(StateManager.Builder< | + | protected void appendProperties(StateManager.Builder< |
- | | + | |
} | } | ||
- | | + | |
} | } | ||
</ | </ | ||
- | 然后,我们需要在方块构造器中设置属性的默认状态: | + | 然后,我们需要在方块构造器中设置属性的默认状态(要设置多个属性,请通过调用 '' |
<code java> | <code java> | ||
- | public class MyBlock | + | public class ChargeableBlock |
[...] | [...] | ||
- | public | + | public |
super(settings); | super(settings); | ||
- | setDefaultState(getStateManager().getDefaultState().with(HARDENED, false)); | + | setDefaultState(getDefaultState().with(CHARGED, false)); |
} | } | ||
- | | + | |
} | } | ||
</ | </ | ||
- | (要设置多个属性,请通过调用'' | ||
- | 现在,要设置属性,我们需要调用'' | + | 现在,我们需要能够通过 '' |
- | + | ||
- | (用你的方块的实例替换'' | + | |
<code java> | <code java> | ||
- | public class MyBlock | + | public class ChargeableBlock |
[...] | [...] | ||
@Override | @Override | ||
public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { | public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { | ||
- | world.setBlockState(pos, | + | |
+ | | ||
return ActionResult.SUCCESS; | return ActionResult.SUCCESS; | ||
} | } | ||
} | } | ||
</ | </ | ||
- | 并使用该属性,我们称为'' | + | |
+ | 最后,要使用 | ||
<code java> | <code java> | ||
- | public class MyBlock | + | public class ChargeableBlock |
[...] | [...] | ||
@Override | @Override | ||
- | public | + | public |
- | | + | |
- | if(hardened) return 2.0f; | + | // 在方块的位置召唤闪电 |
- | | + | LightningEntity lightningEntity = (LightningEntity) EntityType.LIGHTNING_BOLT.create(world); |
+ | | ||
+ | world.spawnEntity(lightningEntity); | ||
+ | | ||
+ | |||
+ | world.setBlockState(pos, | ||
+ | super.onSteppedOn(world, | ||
} | } | ||
} | } | ||
Line 60: | Line 84: | ||
==== 为方块状态添加模型 ==== | ==== 为方块状态添加模型 ==== | ||
- | 您还可以根据状态更改方块的纹理和模型。 这是通过称为Blockstate | + | 你可能还需要使得纹理和模型能够根据状态来改变,这是通过一个叫做“方块状态 |
- | 假设您将'' | + | 比如说,你为 |
- | <code JavaScript resources/ | + | <code JavaScript resources/ |
{ | { | ||
- | " | + | |
- | "": | + | |
+ | "": | ||
+ | | ||
} | } | ||
+ | |||
} | } | ||
</ | </ | ||
- | 让我们分解一下这个简单的例子。 JSON有几个重要的部分: | + | 让我们分解一下这个简单的例子。JSON 有几个重要的部分: |
- | -'' | + | - '' |
- | -名为的变体将应用于每个方块状态的排列。如果您有变体,则JSON中不应包含任何其他变体,否则Minecraft会不高兴。 | + | - 名为 |
- | -分配给变体的对象可以添加各种属性,例如旋转或纹理处理。请查看下面的链接的“模型”页面,以获取有关可以添加哪些属性的更多文档。 所有变体都必须包含“模型”属性。 | + | - 分配给 |
- | -始终在模型属性中传递“模型”属性。在这种情况下,游戏将查看位置``src/mainresources/assets/mymod/models/ block/my_block.json``。这里的ID可以是任何东西。它不需要与方块的ID相同,但是如果您只有一个变体,则可能应该相同。方块模型具有自己的设置,在下面链接的Minecraft Wiki页面上有很好的记录。您可以手工编写JSON,也可以使用[[https:// | + | - ''" |
- | 如果想要为每个方块状态使用不同的模型,则需要添加多个变体。对于我们上面使用的相同的'' | + | 如果//确实//想要为每个方块状态使用不同的模型,则需要添加多个变种。对于我们上面使用的同一个 |
- | <code JavaScript resources/ | + | <code JavaScript resources/ |
- | { | + | { |
- | " | + | " |
- | "hardened=false": | + | "charged=false": |
- | "hardened=true": | + | "charged=true": |
+ | | ||
} | } | ||
- | } | ||
</ | </ | ||
- | 在此JSON中,有两种变体,一种针对我们上面定义的'' | + | 在此 JSON中,有两个变种,一种针对我们上面定义的 '' |
- | 变体基于添加到块中的属性的可能排列。如果需要,可以在块状态JSON中完全忽略属性,例如在第一个块状态JSON中我们忽略了``hardened``属性,但如果要在一个变体中包含属性,则必须将其包含在中所有变体。如果``mymod:my_block``还具有一个称为``glowing``的布尔属性,并且您想根据模型是否发光以及是否经过硬化来更改模型,则需要四个变体:harded off和发光,硬化并发光,硬化并发光,并硬化并发光。如果需要,可以将同一模型分配给多个变体。 | + | 变种基于添加到方块中的属性的可能排列。如果需要,可以在方块状态 JSON 中完全忽略某个属性,例如在第一个方块状态 JSON 中我们忽略了 |
+ | |||
+ | 这只是对方块状态 JSON 的简单介绍。[[https:// | ||
- | 这只是对块状态JSON的简单介绍。 [[https:// | ||
==== 关于性能的注意事项 ==== | ==== 关于性能的注意事项 ==== | ||
- | 游戏开始时会注册方块的所有可能状态。这意味着,如果具有14个布尔属性,则该方块具有2 ^ 14 = 16384个不同的状态,并且会注册这2 ^ 14个状态。因此,方块不应包含太多的方块状态属性。相反,方块状态应主要保留用于视觉效果,需要使用更高级的状态应使用[[zh_cn: | + | |
+ | 游戏开始时会注册方块的所有可能状态。这意味着,如果具有14个布尔属性,则该方块具有2 ^ 14 = 16384个不同的状态,并且会注册这2 ^ 14个状态。因此,方块不应包含太多的方块状态属性。相反,方块状态应主要保留用于视觉效果,需要使用更高级的状态应使用[[zh_cn: | ||
+ | |||
+ | 由于所有的可能的方块状态都已经构建好了,因此相等的方块状态是同一个对象,'' |
zh_cn/tutorial/blockstate.txt · Last modified: 2023/11/18 08:13 by solidblock