Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用事件(minecraft API)将玩家信息从客户端发送到服务器_Javascript_Api_Windows 10_Client_Minecraft - Fatal编程技术网

Javascript 使用事件(minecraft API)将玩家信息从客户端发送到服务器

Javascript 使用事件(minecraft API)将玩家信息从客户端发送到服务器,javascript,api,windows-10,client,minecraft,Javascript,Api,Windows 10,Client,Minecraft,我一直在尝试用BETA API创建一个Minecraft Basick Windows 10 MOD。 我目前正在关注{源代码}和Steven Blom的教程,但是这些教程已经过时了,而且不是很多 现在我已经创建了一个客户端脚本,而不是每秒发送一个自定义事件 // CLIENT SCRIPT : // function called once clientSystem.initialize = function () { let customData = {}; // I would l

我一直在尝试用BETA API创建一个Minecraft Basick Windows 10 MOD。 我目前正在关注{源代码}和Steven Blom的教程,但是这些教程已经过时了,而且不是很多

现在我已经创建了一个客户端脚本,而不是每秒发送一个自定义事件

// CLIENT SCRIPT :
// function called once
clientSystem.initialize = function ()
{
    let customData = {}; // I would like this to be a player object but for now it's just an empty object
    clientSystem.registerEventData("myScript:replaceStone", customData); // register a custom event
}

let tps = 20;           // tick per seconds
let tickNumber = 0;     // counter
let tickMax = 1 * tps;  // when tickNumber reach this % limit, an event is sent

// function called every tick so 20 times per second :
clientSystem.update = function()
{
    if (!(++tickNumber % tickMax)) // each second, this condition is true so we enter the if
    {
        // we create a specific object for replace stone event
        let d = clientSystem.createEventData("myScript:replaceStone");
        // we call the event and send the specific object with it. (in this case, an empty object)
        clientSystem.broadcastEvent("myScript:replaceStone", d);
    }
}

// THEN in my server.js script :
/*
** server register the custom event then, listen for it.
** everything works so far.
*/

serverSystem.initialize = function ()
{
    // server register to custom event
    let rpStoneData = {};
    serverSystem.registerEventData("myScript:replaceStone", rpStoneData);
    serverSystem.listenForEvent("myScript:replaceStone", eventData => serverSystem.replaceStone(eventData));
}

/*
** Then the function replaceStone is called and a debug message event is called. 
*/

serverSystem.replaceStone = function(eventData)
{
        let chatEventData = serverSystem.createEventData("minecraft:display_chat_event");
        chatEventData.data.message = "ReplaceStone has been called";
        serverSystem.broadcastEvent("minecraft:display_chat_event", chatEventData);
}
好的,我想通过自定义事件“替换石头”将玩家信息从客户端发送到服务器端。这意味着,与向事件发送空对象不同,我希望发送客户端的播放器信息。比如说球员的位置。 在“替换石头”中,我可以执行一个名为“minecraft:execute_command”的事件,并执行一个特定的命令,如“/setblock x y-1 z stone”,x,y,z将是玩家的位置!
我希望它足够清楚,谢谢你的帮助

您可以在如下自定义事件中发送数据:

if (!(++tickNumber % tickMax)) // each second, this condition is true so we enter the if
    {          
        let d = clientSystem.createEventData("myScript:replaceStone");
        d.data.playerPosition = {x: 0, y: 0, z: 0};
        clientSystem.broadcastEvent("myScript:replaceStone", d);
    }
clientSystem.registerEventData("myScript:replaceStone", {playerPosition: null}); 
并按如下方式定义注册上的事件:

if (!(++tickNumber % tickMax)) // each second, this condition is true so we enter the if
    {          
        let d = clientSystem.createEventData("myScript:replaceStone");
        d.data.playerPosition = {x: 0, y: 0, z: 0};
        clientSystem.broadcastEvent("myScript:replaceStone", d);
    }
clientSystem.registerEventData("myScript:replaceStone", {playerPosition: null}); 
顺便说一下,没有必要注册“myScript:replaceStone”两次。您正在客户端和服务器上注册它,但在发送事件的一侧注册就足够了。在这种情况下,在客户端注册它,因为它是发送方。服务器可以侦听事件而无需注册