FabricMod 1.15.2:
例如,一个叫“AAbb”的玩家,在游戏内输入“/shoo”,输入完毕后服务器向玩家发送“HelloWorld”消息,并播放“minecraft:ui.toast.challenge_complete ambient”声音
 
 
我用System.out.println()会将消息发送至控制台,我想让其发送到玩家游戏聊天框,并且播放Minecraft原版声音:minecraft:ui.toast.challenge_complete ambient
例如,一个叫“AAbb”的玩家,在游戏内输入“/shoo”,输入完毕后服务器向玩家发送“HelloWorld”消息,并播放“minecraft:ui.toast.challenge_complete ambient”声音
 
我用System.out.println()会将消息发送至控制台,我想让其发送到玩家游戏聊天框,并且播放Minecraft原版声音:minecraft:ui.toast.challenge_complete ambient
因为没接触过mod
所以只能提供一点思路
先获取到输入指令的玩家 以player为例
当player输入指令后 先要给他发消息
应该是类似player.sendMessage(msg);
然后是播放声音 player.playSound(sound);
以上代码是Bukkit的代码 这里只是作为例子提供思路
具体实现以fabric的方法为准
所以只能提供一点思路
先获取到输入指令的玩家 以player为例
当player输入指令后 先要给他发消息
应该是类似player.sendMessage(msg);
然后是播放声音 player.playSound(sound);
以上代码是Bukkit的代码 这里只是作为例子提供思路
具体实现以fabric的方法为准
我是个新手,,不过下面这个方法可以试试看
ICommand接口内有个方法叫做
复制代码
可以实现这个接口的方法或者继承这个接口的实现类,CommandBase,都可以自己实现这个方法。
播放音乐可以在execute内部使用下面这个方法试试
复制代码
然后就是利用sender的这个方法,就可以吧需要发送的发送到玩家聊天窗口
复制代码
ICommand接口内有个方法叫做
- void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException;
可以实现这个接口的方法或者继承这个接口的实现类,CommandBase,都可以自己实现这个方法。
播放音乐可以在execute内部使用下面这个方法试试
-         world.playSound(null, player.posX, player.posY, player.posZ, SoundLoader.TRANSMUTE, SoundCategory.PLAYERS, 1, 1);
 
然后就是利用sender的这个方法,就可以吧需要发送的发送到玩家聊天窗口
- sender.sendMessage(new TextComponentTranslation("commands.success");
Orion_shadow 发表于 2020-6-20 15:53
我是个新手,,不过下面这个方法可以试试看
ICommand接口内有个方法叫做
我这个事1.12.2的,,
编程新手,来学习下呀
 本帖最后由 洞穴夜莺 于 2020-6-25 21:44 编辑 
首先由于你要发送消息给玩家,所以你的命令要改成只有玩家有权执行,对于服务器后台等杂七杂八的CommandSource直接告诉他没有权限
复制代码
然后发送消息
复制代码
复制代码
其中0.5是音量,1.0是音调,这里直接发包而不是调用playSound是因为playSound会让该玩家附近的玩家也听到声音
综上所述
复制代码
首先由于你要发送消息给玩家,所以你的命令要改成只有玩家有权执行,对于服务器后台等杂七杂八的CommandSource直接告诉他没有权限
- .requires(src -> src.getEntity() instanceof ServerPlayerEntity)
然后发送消息
- player.sendMessage(new LiteralText("Hello World"));
- player.networkHandler.sendPacket(new PlaySoundS2CPacket(SoundEvents.UI_TOAST_CHALLENGE_COMPLETE, SoundCategory.AMBIENT,
 
- player.getX() + 0.5, player.getY() + 1.0, player.getZ() + 0.5,0.5f, 1.0f));
其中0.5是音量,1.0是音调,这里直接发包而不是调用playSound是因为playSound会让该玩家附近的玩家也听到声音
综上所述
- CommandRegistry.INSTANCE.register(false, dispatcher -> {
 
-             dispatcher.register(CommandManager.literal("shoo").requires(src -> src.getEntity() instanceof ServerPlayerEntity).executes( ctx -> {
 
-                 ServerPlayerEntity player = ctx.getSource().getPlayer();
 
-                 player.sendMessage(new LiteralText("Hello World"));
 
-                 player.networkHandler.sendPacket(new PlaySoundS2CPacket(SoundEvents.UI_TOAST_CHALLENGE_COMPLETE, SoundCategory.AMBIENT,
 
-                         player.getX() + 0.5, player.getY() + 1.0, player.getZ() + 0.5,0.5f, 1.0f));
 
-                 return 1;
 
-             }));
 
- });