专sha苦力怕
刚开始学mod开发的萌新:
1.18.2 Fabric
如何在游戏刻里加入自己的事件,比如实现每20刻执行tp命令,将玩家传送到~128 ~ ~



aiusyudiyab
mixin 到 tick AT HEAD,increment 一个counter, 然后 player.requestTeleport

专sha苦力怕
aiusyudiyab 发表于 2022-7-2 22:17
mixin 到 tick AT HEAD,increment 一个counter, 然后 player.requestTeleport

怎么获取玩家变量

aiusyudiyab

要么用名字找,要么获取某个世界的玩家?不知道你什么需求啊

专sha苦力怕
aiusyudiyab 发表于 2022-7-2 22:17
mixin 到 tick AT HEAD,increment 一个counter, 然后 player.requestTeleport

有现成的代码吗
传送的是执行命令的玩家
另外用requestTeleport传送失败,用move成功了
counter我也不会用

aiusyudiyab
专sha苦力怕 发表于 2022-7-3 16:02
有现成的代码吗
传送的是执行命令的玩家
另外用requestTeleport传送失败,用move成功了

你发你的代码出来我帮你改下

专sha苦力怕
本帖最后由 专sha苦力怕 于 2022-7-3 18:05 编辑
aiusyudiyab 发表于 2022-7-3 17:42
你发你的代码出来我帮你改下

  1. public class ExampleMod implements ModInitializer {

  2.     public static final Logger LOGGER = LoggerFactory.getLogger("modid");

  3.             @Override
  4.             public void onInitialize() {

  5.                         CommandRegistrationCallback.EVENT.register((dispatcher, dedicated) -> {
  6.                                     dispatcher.register(CommandManager.literal("foo").executes(context -> {

  7.                                                 new theThread().start();
  8.                                                 System.out.println("foo");
  9.                                                 return 1;

  10.                                     }));
  11.                         });

  12.             }

  13. }

  14. class theThread extends Thread {

  15.     // 传送玩家,延时1.8秒后截图,重复395次
  16.    
  17.             @Override
  18.             public void run() {

  19.                         MinecraftClient client = MinecraftClient.getInstance();
  20.                         ClientPlayerEntity p = client.player;

  21.                         for (int i = 0; i < 395; i++) {

  22.                                     d(1800, p, client, 0, 128);
  23.                                     d(1800, p, client, 0, 128);
  24.                                     d(1800, p, client, 128, -256);

  25.                         }

  26.             }
  27.         
  28.             private void d(long t, ClientPlayerEntity p, MinecraftClient client, int x, int z) {

  29.                         try {
  30.                                     p.move(MovementType.PLAYER, new Vec3d(x,0,z));
  31.                                     sleep(t);
  32.                         } catch (InterruptedException e) {
  33.                                     e.printStackTrace();
  34.                         } finally {
  35.                                     ScreenshotRecorder.saveScreenshot(client.runDirectory,
  36.                                               client.getFramebuffer(),message -> client.execute(() ->
  37.                                                           client.inGameHud.getChatHud().addMessage(message)));
  38.                         }

  39.                         try {
  40.                                     sleep(50);
  41.                         } catch (InterruptedException e) {
  42.                                     e.printStackTrace();
  43.                         }

  44.             }
  45.         
  46. }
复制代码

mixin tick没写,不会写,就用线程凑合了

aiusyudiyab
专sha苦力怕 发表于 2022-7-3 18:00
mixin tick没写,不会写,就用线程凑合了

你这什么代码,里面都是xml,怎么看

专sha苦力怕
aiusyudiyab 发表于 2022-7-3 18:01
你这什么代码,里面都是xml,怎么看

改了。论坛的bug

aiusyudiyab

你打算做客户端mod还是服务器mod?你打算你的用户是在哪里使用你的mod?

aiusyudiyab
本帖最后由 aiusyudiyab 于 2022-7-3 18:13 编辑

你客户端直接 ClientPlayerEntity.move ,就是作弊,在服务器看起来就是传送挂

专sha苦力怕
aiusyudiyab 发表于 2022-7-3 18:09
你打算做客户端mod还是服务器mod?你打算你的用户是在哪里使用你的mod?

客户端。给自己写的小工具,没有用户。
需求就是按一定路线传送玩家并截图,可以理解为航拍

aiusyudiyab
专sha苦力怕 发表于 2022-7-3 18:30
客户端。给自己写的小工具,没有用户。
需求就是按一定路线传送玩家并截图,可以理解为航拍 ...

但是到服务器上你这个根本不能跑,服务器不会让你一下子传送这么远的,你这也就单人能用

aiusyudiyab
专sha苦力怕 发表于 2022-7-3 18:30
客户端。给自己写的小工具,没有用户。
需求就是按一定路线传送玩家并截图,可以理解为航拍 ...

我感觉以你的需求,是不是应该用replaymod

专sha苦力怕
aiusyudiyab 发表于 2022-7-3 18:37
我感觉以你的需求,是不是应该用replaymod

replay试过了,不好用。现在这个半成品已经能凑合用了,效果比replay好。
就是在单人存档里用,没打算跑服务器。
其实现在改写tick都不需要了,只要能给命令添加两个参数就行,参数传给线程里的for循环次数,sleep时间

aiusyudiyab
添加命令你直接参考别人的代码就可以了,https://github.com/Earthcomputer ... and/FovCommand.java