无法检查在 Minecraft Forge 中破坏了哪种方块
Can't check what kind of block was broken in Minecraft Forge
我是 Java 的编程新手,我正在尝试学习如何使用 Forge 创建 Minecraft 模组。我正在关注 Arun Gupta 和 Aditya Gupta 写的一本名为 Minecraft Modding With Forge 的书,并使用 Minecraft 1.7.10。当我这样做时:
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.init.Blocks;
import net.minecraftforge.event.world.BlockEvent.BreakEvent;
public class DiamondOreTrap {
@SubscribeEvent
public void explode(BreakEvent event){
if(event.state.getBlock() != Blocks.diamond_ore){
return;
}
event.world.createExplosion(null,event.pos.getX(),event.pos.getY(),event.pos.getZ(),10,true);
}
}
弹出两个错误:"pos" 无法解析为字段,"state" 无法解析为字段。
好吧,问题是这些字段是针对 MC 1.10+
event.state.getBlock()
引用了 1.10 中添加的 IBlockState
,这样模组制作者就不必记住神奇的元数据数字,而是可以使用 FACING:NORTH
或 LIT:true
等值.
对于 1.7.10 及更早版本,您必须手动使用块/元数据组合。可能这里的替换是event.block
或者event.getBlock()
,我没有设置1.7.10的环境,所以没法去查看。使用您的 IDE 检查事件对象并查看可用的属性以及它们是否需要 getter 函数。
同样地,event.pos.getX()
引用 BlockPos
对象,这些对象是围绕 X、Y、Z 坐标的不可修改的包装器,其中发生了某些事情。替换应该是 event.getX()
或 event.posX
或类似的。
(如果有人碰巧使用 1.8 或 1.9,我不知道这些版本的代码库处于什么状态,在很多方面它与 1.7 相似,但在其他方面更像 1.10 和我没有为 1.8 或 1.9 做任何修改我只是完全无知)。
不过,我确实建议您更新到较新的版本。
您正在寻找仅存在于 minecraft Forge v1.8+ 中的 BlockEvent.BreakEvent 字段。
这里是the documentation for the event in 1.7。如您所见,pos
被分解为 x
、y
、z
,您有 block
和 blockMetadata
而不是 state
在这个旧版本的 Minecraft 和 Forge 中。
我同意其他人的看法,如果您想进入 minecraft 模组,最好使用在线教程并使用 v1.12 模组,因为使用 1.7 的人数正在急剧下降。
我是 Java 的编程新手,我正在尝试学习如何使用 Forge 创建 Minecraft 模组。我正在关注 Arun Gupta 和 Aditya Gupta 写的一本名为 Minecraft Modding With Forge 的书,并使用 Minecraft 1.7.10。当我这样做时:
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.init.Blocks;
import net.minecraftforge.event.world.BlockEvent.BreakEvent;
public class DiamondOreTrap {
@SubscribeEvent
public void explode(BreakEvent event){
if(event.state.getBlock() != Blocks.diamond_ore){
return;
}
event.world.createExplosion(null,event.pos.getX(),event.pos.getY(),event.pos.getZ(),10,true);
}
}
弹出两个错误:"pos" 无法解析为字段,"state" 无法解析为字段。
好吧,问题是这些字段是针对 MC 1.10+
event.state.getBlock()
引用了 1.10 中添加的 IBlockState
,这样模组制作者就不必记住神奇的元数据数字,而是可以使用 FACING:NORTH
或 LIT:true
等值.
对于 1.7.10 及更早版本,您必须手动使用块/元数据组合。可能这里的替换是event.block
或者event.getBlock()
,我没有设置1.7.10的环境,所以没法去查看。使用您的 IDE 检查事件对象并查看可用的属性以及它们是否需要 getter 函数。
同样地,event.pos.getX()
引用 BlockPos
对象,这些对象是围绕 X、Y、Z 坐标的不可修改的包装器,其中发生了某些事情。替换应该是 event.getX()
或 event.posX
或类似的。
(如果有人碰巧使用 1.8 或 1.9,我不知道这些版本的代码库处于什么状态,在很多方面它与 1.7 相似,但在其他方面更像 1.10 和我没有为 1.8 或 1.9 做任何修改我只是完全无知)。
不过,我确实建议您更新到较新的版本。
您正在寻找仅存在于 minecraft Forge v1.8+ 中的 BlockEvent.BreakEvent 字段。
这里是the documentation for the event in 1.7。如您所见,pos
被分解为 x
、y
、z
,您有 block
和 blockMetadata
而不是 state
在这个旧版本的 Minecraft 和 Forge 中。
我同意其他人的看法,如果您想进入 minecraft 模组,最好使用在线教程并使用 v1.12 模组,因为使用 1.7 的人数正在急剧下降。