想要知道右键点击方块的坐标!!!!!(第一部分:使用物品在方块上)
这是什么?
这篇文章是2023年Minecraft指令圣诞日历的第11天的文章。
由於還有許多其他優秀的文章,所以請務必一定看看。
首先
你们有没有想过在minecraft游戏中,当玩家对方块进行右键点击时,想要知道该方块的坐标位置?
這篇文章是一個剛開始使用指令的人尋找獲取方塊座標位置的方法並進行測試的記錄。我相信一定會有很棒的製作者提供「這樣做很好」的評論。
想做什么?
当玩家对#{方块}进行#{右键点击}时,获取该#{方块}的坐标并运行处理。
比如说,
当玩家对橡木的木材使用棕色染料右键点击时,获取该橡木木材的坐标并将其变为深橡木木材。
这就是所谓的吧。
实际上,我想要对箱子进行操作,并为箱子添加额外功能,但这篇文章的目标是尝试各种方法来实现这一目标。
更加清晰地整理问题
当玩家对于橡木原木使用棕色染料进行右键点击时,获取该橡木原木的坐标并将其变为深色橡木原木。
从这个命令的角度来看,
-
- 判断玩家是否持有主手中的棕色染料。
-
- 当玩家在橡木木材的可触及范围内时,进行右键点击。
- 检测到第二个右键点击,获取前方橡木木材的坐标。
という3つの段階に分かれていると思います。
今回の記事は前編ということで、1, 2について整理していきましょう。
方法或計劃
由于棕色染料是一个没有右键功能的物品,因此需要检测透明村民的右键点击,然后将盔甲架传送到玩家面对的方向上…
咦,这个东西能用在方块上的时候,能不能做个进步呢?
“advancement中的item_used_on_block是指什么?”
有很多触发器可以定制Minecraft内的成就进度,例如”消耗物品minecraft:consume_item”和”放置方块minecraft:placed_block”等。
现在我们试试其中之一,即当玩家在Minecraft中使用手或物品放置方块时会触发的”minecraft:item_used_on_block”的功能。
やること
やることは
-
- データパックを作成する
-
- 進捗の情報をカスタマイズしてjsonにする
- 進捗を達成した時に動かすfunctionを作成する
创建数据包。
説明は省略しますが、下記のファイル構成で作成していきます。
./ # データパック名
├── README.md
├── data
│ └── test
│ ├── advancements
│ │ └── used_item.json # カスタム進捗の情報
│ └── functions
│ └── used_item.mcfunction # カスタム進捗達成した時に呼び出すfunction
└── pack.mcmeta
将进度信息定制为json格式。
创建名为data/test/advancements/used_item.json的文件,并填写进展信息。
用下面的生成器创建自定义进展比较容易,非常感谢作者。
作成したjsonファイルがこちらです。
使用在方塊上的Minecraft物品。
-
- 使用するitem: locationのminecraft:match_toolコンディション
- 対象のblock: locationのminecraft:block_state_propertyコンディション
听起来好像是指定了。
我首先想要看到一些確實有效的東西,所以我將”item”對應到豬生肉,而”block”則對應到焚火。
{
"criteria": {
"requirement": {
"trigger": "minecraft:item_used_on_block",
"conditions": {
"player": [],
"location": [
{
"condition": "minecraft:match_tool",
"predicate": {
"items": [
"minecraft:porkchop"
]
}
},
{
"condition": "minecraft:block_state_property",
"block": "minecraft:campfire",
"properties": {}
}
]
}
}
},
"rewards": {
"function": "test:used_item"
}
}
请注意,用于 item_used_on_block 的物品和对 block 的选取在大约1.20版本中发生了变化。您可以参考以下网站。
创建一个函数,在达到进展时运行。
让我们创建一个在达到进展时调用的命令。
先ほど作成したused_item.jsonのrewardsで指定しているfunctionのことですね。
title @s title "アイテムを使った"
advancement revoke @s only test:used_item
進捗を達成した後すぐrevokeすることで、再度進捗を達成できます。
フラグ管理をまとめられるadvancementのいいところですよね
让我们试一试移动它。
将前面的代码复制粘贴,即可得到以下结果。
右键点击触发了标题的调用。
对于无法右击的项目,那该怎么办呢?
适用于橡木材的棕色染料以及在同时按下Shift键和右键点击箱子等操作。
修改进度的JSON文件
我将生猪肉染成棕色染料,将篝火的木材替换为橡木材。
{
"criteria": {
"requirement": {
"trigger": "minecraft:item_used_on_block",
"conditions": {
"player": [],
"location": [
{
"condition": "minecraft:match_tool",
"predicate": {
"items": [
"minecraft:brown_dye" // 変更
]
}
},
{
"condition": "minecraft:block_state_property",
"block": "minecraft:oak_planks", // 変更
"properties": {}
}
]
}
}
},
"rewards": {
"function": "test:used_item"
}
}
结果
怦怦直跳…
不合理的
结论
努力右键检测并投掷盔甲架,直到命中目标方块为止,似乎更好。
产物的副产品
尝试了各种方法后,我发现奥克木材也可以被识别为一种物品。
这是什么意思呢?我们可以使用橡木木材来制造橡木木材。也就是说,我们可以检测到将相邻的方块放置在一起。
这个似乎可以在某种情况下派上用场。
{
"criteria": {
"requirement": {
"trigger": "minecraft:item_used_on_block",
"conditions": {
"player": [
],
"location": [
{
"condition": "minecraft:match_tool",
"predicate": {
"items": [
"minecraft:oak_planks"
]
}
},
{
"condition": "minecraft:block_state_property",
"block": "minecraft:oak_planks",
"properties": {}
}
]
}
}
},
"rewards": {
"function": "test:eat_apple"
}
}
最终
由于时间不够,关键的“本来不能右击的方块上拿物品右击”的方法没有写入,所以将在后续中写入(某天)。
如果是可以右键点击的方块和物品,那么在这篇文章中可能有所帮助。
非常感谢您的阅读直到这里