我的世界Java数据包教程:自瞄箭塔
我自乘风九万里
编辑于 2022年06月09日 16:40

有待一日大风起,我自乘风九万里。

大家好,你们可以叫我 扶摇 ,本期专栏的教程是用数据包实现自瞄箭塔

我选用的箭塔是由发射器荧光物品展示框构成的:

发射器内需要,荧光物品展示框内需要

他会每秒扫描一次周围怪物,然后向它射出16伤害的箭矢。

但发射1根箭会消耗荧光物品展示框内的上的耐久。

而一次射出多少根箭,和箭的偏移由下方发射器决定,一共有9个格子,每当一个格子内有64根箭,就会射出1根箭,中间的格子为正心,旁边的格子为偏移(用于一次性伤害一片区域的怪物和提高命中率)

扫描范围为 长49宽49高21 的长方体,避免被地下怪物卡住扫描,无法正常工作。

数据包直接下载:

链接:https://pan.baidu.com/s/1iGr_mLupCXRe_skH4n-3LQ 

提取码:1515

数据包演示:网页链接​

下面教程开始:

(创建数据包的过程已跳过,把下方的:XXX   改为你数据包的名字即可)

第一步:

首先在数据包内创建tags文件夹

再在里面创建entity_types文件夹

再在里面创建ddsw文件(后缀名为.json)

打开文件(可以由记事本打开),在里面输入:

{"replace&#​34;:"false&#​34;,"values&#​34;:[

"minecraft:ender_dragon&#​34;,

"minecraft:enderman&#​34;,

"minecraft:endermite&#​34;,

"minecraft:evoker&#​34;,

"minecraft:ghast&#​34;,

"minecraft:guardian&#​34;,

"minecraft:hoglin&#​34;,

"minecraft:illusioner&#​34;,

"minecraft:magma_cube&#​34;,

"minecraft:piglin&#​34;,

"minecraft:piglin_brute&#​34;,

"minecraft:pillager&#​34;,

"minecraft:ravager&#​34;,

"minecraft:shulker&#​34;,

"minecraft:silverfish&#​34;,

"minecraft:slime&#​34;,

"minecraft:spider&#​34;,

"minecraft:vex&#​34;,

"minecraft:vindicator&#​34;,

"minecraft:witch&#​34;,

"minecraft:elder_guardian&#​34;,

"minecraft:creeper&#​34;,

"minecraft:blaze&#​34;,

"minecraft:cave_spider&#​34;,

"minecraft:zombie&#​34;,

"minecraft:husk&#​34;,

"minecraft:drowned&#​34;,

"minecraft:zombie_villager&#​34;,

"minecraft:skeleton&#​34;,

"minecraft:stray&#​34;,

"minecraft:wither_skeleton&#​34;,

"minecraft:wither&#​34;,

"minecraft:zombified_piglin&#​34;,

"minecraft:zoglin&#​34;,

"minecraft:skeleton_horse&#​34;,

"minecraft:phantom&#​34;]}

用来把所有敌对生物标记为一个类别

第二步:

再在数据包内创建functions文件夹

再在里面创建 ks 文件(后缀名为.mcfunction)

在里面输入:

scoreboard objectives add FSQ1 dummy "位置储存1&#​34;

scoreboard objectives add FSQ2 dummy "位置储存2&#​34;

scoreboard objectives add NJ dummy "耐久储存&#​34;

schedule function XXX:a 1s

这样一会进入游戏直接输入:/function XXX:ks

就可以直接启动了。

第三步:

再在里面创建 a 文件(后缀名为.mcfunction)

在里面输入:

execute as @e[type=glow_item_frame,nbt={Item:{id: "minecraft:iron_sword&#​34;}}] at @s if block ~ ~-1 ~ dispenser run function XXX:b

schedule function XXX:a 1s

内部意思大概为:

为内部有且下方有发射器荧光物品展示框实现箭塔效果

每秒自动执行一次

第四步:

再创建 b 文件(后缀名为.mcfunction)

在里面输入:

kill @e[type=minecraft:arrow,nbt={inGround:1b,pickup:0b}]

execute positioned ~-49 ~-10 ~-49 run tag @e[dy=21,dx=99,dz=99,type=#XXX:ddsw] add sjjmz

execute if block ~ ~-3 ~ dispenser{Items:[{Count:64b,Slot:0b,id:"minecraft:arrow&#​34;}]} facing entity @e[limit=1,sort=nearest,tag=sjjmz] eyes rotated ~6 ~-3 run function XXX:c

execute if block ~ ~-3 ~ dispenser{Items:[{Count:64b,Slot:1b,id:"minecraft:arrow&#​34;}]} facing entity @e[limit=1,sort=nearest,tag=sjjmz] eyes rotated ~ ~-3 run function XXX:c

execute if block ~ ~-3 ~ dispenser{Items:[{Count:64b,Slot:2b,id:"minecraft:arrow&#​34;}]} facing entity @e[limit=1,sort=nearest,tag=sjjmz] eyes rotated ~-6 ~-3 run function XXX:c

execute if block ~ ~-3 ~ dispenser{Items:[{Count:64b,Slot:3b,id:"minecraft:arrow&#​34;}]} facing entity @e[limit=1,sort=nearest,tag=sjjmz] eyes rotated ~6 ~ run function XXX:c

execute if block ~ ~-3 ~ dispenser{Items:[{Count:64b,Slot:4b,id:"minecraft:arrow&#​34;}]} facing entity @e[limit=1,sort=nearest,tag=sjjmz] eyes rotated ~ ~ run function XXX:c

execute if block ~ ~-3 ~ dispenser{Items:[{Count:64b,Slot:3b,id:"minecraft:arrow&#​34;}]} facing entity @e[limit=1,sort=nearest,tag=sjjmz] eyes rotated ~-6 ~ run function XXX:c

execute if block ~ ~-3 ~ dispenser{Items:[{Count:64b,Slot:6b,id:"minecraft:arrow&#​34;}]} facing entity @e[limit=1,sort=nearest,tag=sjjmz] eyes rotated ~6 ~3 run function XXX:c

execute if block ~ ~-3 ~ dispenser{Items:[{Count:64b,Slot:7b,id:"minecraft:arrow&#​34;}]} facing entity @e[limit=1,sort=nearest,tag=sjjmz] eyes rotated ~ ~3 run function XXX:c

execute if block ~ ~-3 ~ dispenser{Items:[{Count:64b,Slot:8b,id:"minecraft:arrow&#​34;}]} facing entity @e[limit=1,sort=nearest,tag=sjjmz] eyes rotated ~-6 ~3 run function XXX:c

tag @e[tag=sjjmz] remove sjjmz

(sjjmz这是一个标记的名称,没有特殊含义,可更改。)

内部意思大概为:

清除掉落在地的(避免卡顿)

标记检测范围内最近怪物

检测发射器内部若对应的格子含有64根箭朝向被标记的怪物进行对应偏移的发射

解除标记

第五步:

再创建 c 文件(后缀名为.mcfunction)

在里面输入:

execute store result score @s NJ run data get entity @s Item.tag.Damage

execute store result entity @s Item.tag.Damage int 1 run scoreboard players add @s NJ 1

execute as @s[nbt={Item:{tag:{Damage:250}}}] run item replace entity @s container.0 with air

summon arrow ^ ^ ^2 {Tags:["FS1&#​34;],HasBeenShot:0b,damage:4}

summon item ~ ~ ~ {Tags:["FS2&#​34;],Invulnerable:1,NoGravity:1,PickupDelay:32767,Age:5999,Item:{id:stone,Count:1}}

execute as @e[tag=FS1] store result score @s FSQ1 run data get entity @s Pos[0] 100000

execute as @e[tag=FS1] store result score @s FSQ2 run data get entity @e[tag=FS2,limit=1,sort=nearest] Pos[0] 100000

execute as @e[tag=FS1] run scoreboard players operation @s FSQ1 -= @s FSQ2

execute as @e[tag=FS1] store result entity @s Motion[0] double 0.00002 run scoreboard players get @s FSQ1

execute as @e[tag=FS1] store result score @s FSQ1 run data get entity @s Pos[1] 100000

execute as @e[tag=FS1] store result score @s FSQ2 run data get entity @e[tag=FS2,limit=1,sort=nearest] Pos[1] 100000

execute as @e[tag=FS1] run scoreboard players operation @s FSQ1 -= @s FSQ2

execute as @e[tag=FS1] store result entity @s Motion[1] double 0.00002 run scoreboard players get @s FSQ1

execute as @e[tag=FS1] store result score @s FSQ1 run data get entity @s Pos[2] 100000

execute as @e[tag=FS1] store result score @s FSQ2 run data get entity @e[tag=FS2,limit=1,sort=nearest] Pos[2] 100000

execute as @e[tag=FS1] run scoreboard players operation @s FSQ1 -= @s FSQ2

execute as @e[tag=FS1] store result entity @s Motion[2] double 0.00002 run scoreboard players get @s FSQ1

tag @e[tag=FS1] remove FS1

kill @e[tag=FS2]

内部意思大概为:

用计分板读取耐久

减少计分板来侧面实现减少耐久

耐久不够则清除

生成,和辅助发射物

读取箭和辅助发射物的坐标,进行求差,把结果作为速度赋予给箭,让箭发射出去。

清除辅助发射物,清除对箭的标记

现在,我们的自瞄箭塔就制作完成了!

数据包直接下载:

链接:https://pan.baidu.com/s/1iGr_mLupCXRe_skH4n-3LQ 

提取码:1515

数据包演示:网页链接​