zh_cn:tutorial:blockstate
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
zh_cn:tutorial:blockstate [2022/12/15 16:46] – solidblock | zh_cn:tutorial:blockstate [2022/12/16 01:52] – [赋予方块状态] 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(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: | ||
==== 为方块状态添加模型 ==== | ==== 为方块状态添加模型 ==== | ||
- | 你可能还需要使得纹理和模型根据状态修改。这是通过叫做方块模型JSON的JSON文件完成的。所有的方块都需要一个方块模型JSON,无论是有多个状态还是只有一个,但是JSON的内容可以简单也可以复杂。如果需要根据模型改变方块纹理,你// | + | 你可能还需要使得纹理和模型能够根据状态来改变,这是通过一个叫做“方块状态 |
- | 假设您将'' | + | 比如说,你为 |
- | <code JavaScript resources/ | + | <code JavaScript resources/ |
{ | { | ||
- | " | + | |
- | "": | + | |
+ | "": | ||
+ | | ||
} | } | ||
+ | |||
} | } | ||
</ | </ | ||
- | 让我们分解一下这个简单的例子。JSON有几个重要的部分: | + | 让我们分解一下这个简单的例子。JSON 有几个重要的部分: |
- | - ''" | + | - ''" |
- | - 名为''""'' | + | - 名为 ''""'' |
- | - 分配给''""'' | + | - 分配给 ''""'' |
- | - ''" | + | - ''" |
- | 如果// | + | 如果// |
- | <code JavaScript resources/ | + | <code JavaScript resources/ |
- | { | + | { |
- | " | + | " |
- | "hardened=false": | + | "charged=false": |
- | "hardened=true": | + | "charged=true": |
+ | | ||
} | } | ||
- | } | ||
</ | </ | ||
- | 在此JSON中,有两个变种,一种针对我们上面定义的'' | + | 在此 JSON中,有两个变种,一种针对我们上面定义的 '' |
- | 变种基于添加到方块中的属性的可能排列。如果需要,可以在方块状态JSON中完全忽略属性,例如在第一个块状态JSON中我们忽略了'' | + | 变种基于添加到方块中的属性的可能排列。如果需要,可以在方块状态 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