iMoonDay
我看网上教程最高也只有1.19.2,而且有很多功能没找到对应的教程,比如我正在找的:以玩家为圆心的一定半径内寻找实体并对实体进行操作

吕易天
public static List<Entity> getEntities(World world, Position pos, double dis, @Nullable Entity except, @Nullable Predicate<Entity> p)
    {
        return world.getEntities(except,new Box(pos.getX()+dis,pos.getY()+dis,pos.getZ()+dis,pos.getX()-dis,pos.getY()-dis, pos.getZ()-dis),p);
    }

吕易天
本帖最后由 吕易天 于 2023-2-5 23:58 编辑

https://fabricmc.net/wiki/zh_cn:start
就是有些页面还没中文翻译,看英文的就可以了

iMoonDay
吕易天 发表于 2023-2-5 23:49
public static List getEntities(World world, Position pos, double dis, @Nullable Entity except, @Null ...

无法解析 'World' 中的方法 'getEntities'

iMoonDay
吕易天 发表于 2023-2-5 23:56
https://fabricmc.net/wiki/zh_cn:start
就是有些页面还没中文翻译,看英文的就可以了
...

我看过了,但是我不知道我需要的在哪里找

吕易天
iMoonDay 发表于 2023-2-6 00:09
无法解析 'World' 中的方法 'getEntities'

你import的是net.minecraft.world.World吗

iMoonDay
吕易天 发表于 2023-2-6 00:11
你import的是net.minecraft.world.World吗

import net.minecraft.world.World;

我想应该是

吕易天
本帖最后由 吕易天 于 2023-2-6 00:15 编辑
iMoonDay 发表于 2023-2-6 00:09
无法解析 'World' 中的方法 'getEntities'

mojang在新版把代码改了(命名是yarn改的,但是过滤器变成NotNull是mojang改的),叫getOtherEntities了,还有那个Predicate变成NotNull了,你用不到直接写e->true就可以了

吕易天
iMoonDay 发表于 2023-2-6 00:10
我看过了,但是我不知道我需要的在哪里找

其实最好的方法就是看mojang写了什么

iMoonDay
吕易天 发表于 2023-2-6 00:13
mojang在新版把代码改了(命名是yarn改的,但是过滤器变成NotNull是mojang改的),叫getOtherEntities了, ...

Predicate变成NotNull,直接写()->true是什么意思,我最近刚学还没搞明白

吕易天
本帖最后由 吕易天 于 2023-2-6 12:07 编辑
iMoonDay 发表于 2023-2-6 00:20
Predicate变成NotNull,直接写()->true是什么意思,我最近刚学还没搞明白

是e->true,Predicate就是谓语(又叫谓词),相当于带参数的命题,用法是predicate.test(obj),它是一个泛型类(接口),有一个类型参数T,那个T就是obj的类型限定,它的test方法返回值类型是boolean,也就是真或假,真代表条件成立,e->true相当于创建一个新类实现Predicate接口,而你写的那部分就是test这个抽象方法的实现,相当于接收一个参数e然后直接返回true(真)

吕易天
iMoonDay 发表于 2023-2-6 00:20
Predicate变成NotNull,直接写()->true是什么意思,我最近刚学还没搞明白

我举个例子吧:
Predicate<Integer> t=i->i>1;
System.out.println(t.test(0)); //false
System.out.println(t.test(2)); //true

吕易天
iMoonDay 发表于 2023-2-6 00:20
Predicate变成NotNull,直接写()->true是什么意思,我最近刚学还没搞明白

@NotNull就是这个值不能为null,@Nullable就是这个值可以是null,在没有lombok的情况下这玩意纯属就是给人看的

iMoonDay
吕易天 发表于 2023-2-6 00:24
是e->true,Predicate就是谓语(又叫谓词),相当于带参数的命题,用法是predicate.test(obj),它是一个泛 ...

能帮我大概写一下怎么引用这个函数吗,我想参考一下,内容是将玩家30格范围内的所有掉落物传送到玩家位置

吕易天
本帖最后由 吕易天 于 2023-2-6 00:45 编辑
iMoonDay 发表于 2023-2-6 00:34
能帮我大概写一下怎么引用这个函数吗,我想参考一下,内容是将玩家30格范围内的所有掉落物传送到玩家位置 ...

虽然是立方体而不是球,player.getWorld().getOtherEntities(player,new Box(player.getPos().getX()+30,player.getPos().getY()+30,player.getPos().getZ()+30,player.getPos().getX()-30,player.getPos().getY()-30, player.getPos().getZ()-30),e->e instanceof ItemEntity).forEach(e->e.teleport(player.getPos().getX(),player.getPos().getY(),player.getPos().getZ()));

iMoonDay
吕易天 发表于 2023-2-6 00:43
虽然是立方体而不是球,player.getWorld().getOtherEntities(player,new Box(player.getPos().getX()+30,p ...

好像缺个条件,如果要指定实体类型的话是不是把e->true改掉,这怎么改呢

吕易天
iMoonDay 发表于 2023-2-6 00:53
好像缺个条件,如果要指定实体类型的话是不是把e->true改掉,这怎么改呢

e->e instanceof ItemEntity

iMoonDay
吕易天 发表于 2023-2-6 00:59
e->e instanceof ItemEntity

所以只要在e->后面填表达式就行了对吧?

吕易天
iMoonDay 发表于 2023-2-6 01:04
所以只要在e->后面填表达式就行了对吧?

是的,如果有多个代码句就用{}包裹然后return xxx;

iMoonDay
吕易天 发表于 2023-2-6 01:07
是的,如果有多个代码句就用{}包裹然后return xxx;

如果要统计一下实体的数量怎么return回去呢

iMoonDay
吕易天 发表于 2023-2-6 01:07
是的,如果有多个代码句就用{}包裹然后return xxx;

刚刚我把他转化成数量然后return回去之后用sendMessage显示数量结果发现一次会发两条内容

吕易天
iMoonDay 发表于 2023-2-6 01:42
刚刚我把他转化成数量然后return回去之后用sendMessage显示数量结果发现一次会发两条内容 ...

因为服务端和客户端各跑了一次所以会有两条

吕易天
iMoonDay 发表于 2023-2-6 01:42
刚刚我把他转化成数量然后return回去之后用sendMessage显示数量结果发现一次会发两条内容 ...

要限制为仅服务端加个if(player.getWorld() instanceof ServerWorld)就可以了

iMoonDay
吕易天 发表于 2023-2-6 12:06
要限制为仅服务端加个if(player.getWorld() instanceof ServerWorld)就可以了

sendMessage只能限制为服务端吗?还是说客户端服务端二选一没区别。还有我前面一直在研究如何读取实体的nbt并修改,但是一直没找到对应的方法

吕易天
iMoonDay 发表于 2023-2-6 13:51
sendMessage只能限制为服务端吗?还是说客户端服务端二选一没区别。还有我前面一直在研究如何读取实体的nb ...

服务端可以给客户端发消息,客户端可以往ChatHUD里面加消息

吕易天
iMoonDay 发表于 2023-2-6 13:51
sendMessage只能限制为服务端吗?还是说客户端服务端二选一没区别。还有我前面一直在研究如何读取实体的nb ...

不是说只有服务端能发消息,问题在于你那个获取周围实体的方法被执行了两次,所以就发了两条消息

iMoonDay
吕易天 发表于 2023-2-6 18:55
不是说只有服务端能发消息,问题在于你那个获取周围实体的方法被执行了两次,所以就发了两条消息 ...

发消息这个倒是不重要,就是好几个功能我没找到教程不知道怎么写

Ph-苯
这个操作,至少从有fabric的版本开始,代码就没怎么变过,和1.19.3没关系。

iMoonDay
Ph-苯 发表于 2023-2-7 14:03
这个操作,至少从有fabric的版本开始,代码就没怎么变过,和1.19.3没关系。

最近刚开始学java做mod,所以很多不懂

teddyxlandlee
1.19.3?自己去试试不就知道了嘛
有一点跟1.19.2不太一样的是:注册表中 Registry.XXX 被搬到了 Registries.XXX,其他区别不大

写模组要有独立思考解决问题的能力,加油。

Ph-苯
teddyxlandlee 发表于 2023-2-10 10:54
1.19.3?自己去试试不就知道了嘛
有一点跟1.19.2不太一样的是:注册表中 Registry.XXX 被搬到了 Registries ...

原来如此,多谢提醒。不过,这确定不是因为混淆表变动而产生的类名变化?

teddyxlandlee
Ph-苯 发表于 2023-2-10 19:51
原来如此,多谢提醒。不过,这确定不是因为混淆表变动而产生的类名变化? ...

不是。1.19.3 Mojang大改Registry你不知道嘛

第一页 上一页 下一页 最后一页