我看网上教程最高也只有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);
}
{
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:49
public static List getEntities(World world, Position pos, double dis, @Nullable Entity except, @Null ...
无法解析 'World' 中的方法 'getEntities'
吕易天 发表于 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吗
本帖最后由 吕易天 于 2023-2-6 00:15 编辑
mojang在新版把代码改了(命名是yarn改的,但是过滤器变成NotNull是mojang改的),叫getOtherEntities了,还有那个Predicate变成NotNull了,你用不到直接写e->true就可以了
iMoonDay 发表于 2023-2-6 00:09
无法解析 'World' 中的方法 'getEntities'
mojang在新版把代码改了(命名是yarn改的,但是过滤器变成NotNull是mojang改的),叫getOtherEntities了,还有那个Predicate变成NotNull了,你用不到直接写e->true就可以了
iMoonDay 发表于 2023-2-6 00:10
我看过了,但是我不知道我需要的在哪里找
其实最好的方法就是看mojang写了什么
吕易天 发表于 2023-2-6 00:13
mojang在新版把代码改了(命名是yarn改的,但是过滤器变成NotNull是mojang改的),叫getOtherEntities了, ...
Predicate变成NotNull,直接写()->true是什么意思,我最近刚学还没搞明白
本帖最后由 吕易天 于 2023-2-6 12:07 编辑
是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是什么意思,我最近刚学还没搞明白
是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的情况下这玩意纯属就是给人看的
吕易天 发表于 2023-2-6 00:24
是e->true,Predicate就是谓语(又叫谓词),相当于带参数的命题,用法是predicate.test(obj),它是一个泛 ...
能帮我大概写一下怎么引用这个函数吗,我想参考一下,内容是将玩家30格范围内的所有掉落物传送到玩家位置
本帖最后由 吕易天 于 2023-2-6 00:45 编辑
虽然是立方体而不是球,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: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()));
吕易天 发表于 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
吕易天 发表于 2023-2-6 00:59
e->e instanceof ItemEntity
所以只要在e->后面填表达式就行了对吧?
iMoonDay 发表于 2023-2-6 01:04
所以只要在e->后面填表达式就行了对吧?
是的,如果有多个代码句就用{}包裹然后return xxx;
吕易天 发表于 2023-2-6 01:07
是的,如果有多个代码句就用{}包裹然后return xxx;
如果要统计一下实体的数量怎么return回去呢
吕易天 发表于 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)就可以了
吕易天 发表于 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 ...
不是说只有服务端能发消息,问题在于你那个获取周围实体的方法被执行了两次,所以就发了两条消息
吕易天 发表于 2023-2-6 18:55
不是说只有服务端能发消息,问题在于你那个获取周围实体的方法被执行了两次,所以就发了两条消息 ...
发消息这个倒是不重要,就是好几个功能我没找到教程不知道怎么写
这个操作,至少从有fabric的版本开始,代码就没怎么变过,和1.19.3没关系。
Ph-苯 发表于 2023-2-7 14:03
这个操作,至少从有fabric的版本开始,代码就没怎么变过,和1.19.3没关系。
最近刚开始学java做mod,所以很多不懂
1.19.3?自己去试试不就知道了嘛
有一点跟1.19.2不太一样的是:注册表中 Registry.XXX 被搬到了 Registries.XXX,其他区别不大
写模组要有独立思考解决问题的能力,加油。
有一点跟1.19.2不太一样的是:注册表中 Registry.XXX 被搬到了 Registries.XXX,其他区别不大
写模组要有独立思考解决问题的能力,加油。
teddyxlandlee 发表于 2023-2-10 10:54
1.19.3?自己去试试不就知道了嘛
有一点跟1.19.2不太一样的是:注册表中 Registry.XXX 被搬到了 Registries ...
原来如此,多谢提醒。不过,这确定不是因为混淆表变动而产生的类名变化?
Ph-苯 发表于 2023-2-10 19:51
原来如此,多谢提醒。不过,这确定不是因为混淆表变动而产生的类名变化? ...
不是。1.19.3 Mojang大改Registry你不知道嘛
teddyxlandlee 发表于 2023-2-10 20:08
不是。1.19.3 Mojang大改Registry你不知道嘛
不知道啊。因为1.19.3是1.20的小版本,所以我还没写1.19.3的模组。
Ph-苯 发表于 2023-2-11 13:29
不知道啊。因为1.19.3是1.20的小版本,所以我还没写1.19.3的模组。
《小版本》
1.19.3 以来,Mojang 已经宣布在小版本加入更多(对Mod来说)破坏性的更改了。
Mojang 说到做到。
teddyxlandlee 发表于 2023-2-11 14:03
《小版本》
1.19.3 以来,Mojang 已经宣布在小版本加入更多(对Mod来说)破坏性的更改了。
Mojang 说到做 ...
不用1.19.3,1.18.2的TagKey就已经是破坏性更新了。非常坏版本控制,恨来自瓷器。