本帖最后由 干就完了 于 2021-8-8 10:35 编辑
这个问题使用的工作环境是1.16.5 Forge 36.2.0,Windows10,Java16.0.2。
我想设置一个物品,这个物品实现以下的功能:
右键物品,将会释放4支箭,然后这4支箭分别朝向【东,南,西,北】四个方向发射。然后在落地的一瞬间爆炸。然后物品开始冷却。
那么我这里已经将上面的绝大部分都实现了,但是还有个问题,当我右键这个物品的时候,物品射出去的箭并不是朝着我理想的方向射出去的,我设置了一些参数,就在BlastFungusItem.java这个类里面的shoot方法体,现在我有一个问题,如何让箭矢朝着玩家的四周发射箭??
有谁能帮我解决这个问题不??下面是我的部分工作空间
BlastFungusEntity.java
https://paste.ubuntu.com/p/BSVZ7XRcHc/
BlastFungusItem.java
https://paste.ubuntu.com/p/wbDbdrXFhK/
只用说说怎样设置那个shoot方法体即可。。。
这个问题使用的工作环境是1.16.5 Forge 36.2.0,Windows10,Java16.0.2。
我想设置一个物品,这个物品实现以下的功能:
右键物品,将会释放4支箭,然后这4支箭分别朝向【东,南,西,北】四个方向发射。然后在落地的一瞬间爆炸。然后物品开始冷却。
那么我这里已经将上面的绝大部分都实现了,但是还有个问题,当我右键这个物品的时候,物品射出去的箭并不是朝着我理想的方向射出去的,我设置了一些参数,就在BlastFungusItem.java这个类里面的shoot方法体,现在我有一个问题,如何让箭矢朝着玩家的四周发射箭??
有谁能帮我解决这个问题不??下面是我的部分工作空间
BlastFungusEntity.java
https://paste.ubuntu.com/p/BSVZ7XRcHc/
BlastFungusItem.java
https://paste.ubuntu.com/p/wbDbdrXFhK/
只用说说怎样设置那个shoot方法体即可。。。
关于这我就不知道了
什么叫做 不是理想方向
可以尝试设置坐标中的朝向来设定箭头朝向,然后加个向量让他飞出去?
(不是很懂forge 只是一个不成熟的思路
可以尝试设置坐标中的朝向来设定箭头朝向,然后加个向量让他飞出去?
(不是很懂forge 只是一个不成熟的思路
本帖最后由 干就完了 于 2021-8-6 12:58 编辑
意思嘛,大概就是箭矢只会朝着面朝方向射出,不会朝着左右射出……飞出去的话,是已经飞出去了,能飞,就是方向不对。。。
意思嘛,大概就是箭矢只会朝着面朝方向射出,不会朝着左右射出……飞出去的话,是已经飞出去了,能飞,就是方向不对。。。
本帖最后由 Dasffafa 于 2021-8-7 23:23 编辑
警告你一下,你的mappings版本可能不对,我的1.16.5Forge,方法名不是这些。
请务必注意这一条!请把build.gradle发上来。
我发现之前的方法不是最方便的,yaw本身就是角度制,可以直接操作见我之后的回答。
建议封装一个函数。下面轻光233说了这个问题。
警告你一下,你的mappings版本可能不对,我的1.16.5Forge,方法名不是这些。
请务必注意这一条!请把build.gradle发上来。
我发现之前的方法不是最方便的,yaw本身就是角度制,可以直接操作见我之后的回答。
建议封装一个函数。下面轻光233说了这个问题。
本帖最后由 干就完了 于 2021-8-7 00:08 编辑
我大概懂你的意思……
我大概懂你的意思……
Dasffafa 发表于 2021-8-6 23:34
警告你一下,你的mappings版本可能不对,我的1.16.5Forge,方法名不是这些。
请务必注意这一条!请把build. ...
这是我的build.gradle,有一部分注释没有删除,行,我用的【official】译名,如果你让我换回原来的【snapshot】,我已经写了这么多,换回去不妥吧……
能说的详细点不,思路可还行,就是不知道在MC中的类的方法是什么……光说个向量偏转,我不太懂……谢谢你的回答

https://paste.ubuntu.com/p/YKvm594NWr/
233333333333333333
本帖最后由 轻光233 于 2021-8-7 15:23 编辑
我这里的forge库提供的名称和你的差别巨大,只能从你给的代码的方法名来猜
首先,你可以把shoot方法只留下一个,也就是这样
复制代码
之后再写一个shootAround方法
复制代码再把onUsingTick里面那一坨shoot换成这个shootAround就可以了
这样的转动用虚数表示更加形象,不过这样也可以,反正没区别
and,你这个类库是哪来的东西。。。名字全不一样
如果Vec3d这名字都不对,你就自己纠正吧
干就完了 发表于 2021-8-7 00:08
这是我的build.gradle,有一部分注释没有删除,行,我用的【official】译名,如果你让我换回原来的【snap ...
我这里的forge库提供的名称和你的差别巨大,只能从你给的代码的方法名来猜
首先,你可以把shoot方法只留下一个,也就是这样
- public void shootNorth(World world, LivingEntity entity,double x,double y) {
- BlastFungusEntity entityb = new BlastFungusEntity(entity, world);
- entityb.shoot(x,y,0, 15, 1);
- entityb.setSilent(true);
- entityb.setCritArrow(true);
- entityb.setBaseDamage(8);
- entityb.setKnockback(2);
- world.addFreshEntity(entityb);
- world.playSound(null, entity.getX(), entity.getY(), entity.getZ(), SoundEvents.ARROW_SHOOT, SoundCategory.PLAYERS, 1, 1f / (random.nextFloat() * 0.5f + 1) + (2));
- }
之后再写一个shootAround方法
- public void shootAround(World world, LivingEntity entity) {
- double x = entity.getLookAngle().x;
- double y = entity.getLookAngle().y;
- double buf = 0;
- shoot(world,entity,x,y);
- buf = -y;
- y = x;
- x = buf;
- shoot(world,entity,x,y);
- buf = -y;
- y = x;
- x = buf;
- shoot(world,entity,x,y);
- buf = -y;
- y = x;
- x = buf;
- shoot(world,entity,x,y);
- }
这样的转动用虚数表示更加形象,不过这样也可以,反正没区别
and,你这个类库是哪来的东西。。。名字全不一样
如果Vec3d这名字都不对,你就自己纠正吧
干就完了 发表于 2021-8-7 00:08
这是我的build.gradle,有一部分注释没有删除,行,我用的【official】译名,如果你让我换回原来的【snap ...
想象你的眼睛看的方向,当你左右摇头的时候,你的脑袋的Yaw值就会改变,当你上下点头的时候,Pitch值就会改变。
projectile.func_234612_a_(
caster, caster.rotationPitch, caster.rotationYaw+90, 0.0F, 0.3f, 0.5F);这就是向右偏转90
projectile.func_234612_a_(
caster, caster.rotationPitch, caster.rotationYaw-90, 0.0F, 0.3f, 0.5F);这就是向左偏转90
projectile.func_234612_a_(
caster, caster.rotationPitch, caster.rotationYaw-180, 0.0F, 0.3f, 0.5F);这就是向后偏转
caster, caster.rotationPitch, caster.rotationYaw+90, 0.0F, 0.3f, 0.5F);这就是向右偏转90
projectile.func_234612_a_(
caster, caster.rotationPitch, caster.rotationYaw-90, 0.0F, 0.3f, 0.5F);这就是向左偏转90
projectile.func_234612_a_(
caster, caster.rotationPitch, caster.rotationYaw-180, 0.0F, 0.3f, 0.5F);这就是向后偏转
非常建议你使用snapshot。否则你阅读别人的源码或者查看别人的解答,都会遇到问题。
轻光233 发表于 2021-8-7 15:09
我这里的forge库提供的名称和你的差别巨大,只能从你给的代码的方法名来猜
首先,你可以把shoot方法只留下 ...
不行不行,这样的话我的物品射出去的角度就在我的正脚下。。
我在想是不是shoot方法体里面的那个0.0F误导了我……
这样,今天白天我试试用snapshot发代码过来,再尝试解决一下吧……
非常感谢各路大神的指导!感谢!

Dasffafa 发表于 2021-8-7 23:19
projectile.func_234612_a_(
caster, caster.rotationPitch, caster.rotationYaw+90, 0.0F ...
我理解了,用了snapshot的mapping方法,终于成功了!非常感谢你!
此问题已解决,非常感谢!!!
BlastFungusItem.java
https://paste.ubuntu.com/p/MDcQjdjbVN/
(提醒一下,不建议 1.17 以下版本使用 JDK 16)
贺兰兰 发表于 2021-8-8 12:00
(提醒一下,不建议 1.17 以下版本使用 JDK 16)
但是,只要他的targetCompatibility设置为1.8,那么,无论他用那个版本的JDK写的Mod,都可以运行于Java 8上
感觉弓箭射出去还是挺真实的
