标签: minecraft

通过网络构建和发送二进制数据

我正在为我的世界创建一个命令行客户端.有关该协议的完整规范,可在此处找到:http://mc.kev009.com/Protocol.要事先回答你的问题,是的,我有点像C++菜鸟.

我在实现这个协议时遇到了各种各样的问题,每个问题都很关键

  1. 协议说所有类型都是big-endian.我不知道如何检查我的数据是否为little-endian,如果是,则如何转换为big-endian.
  2. 字符串数据类型有点奇怪.它是一个修改过的UTF-8字符串,前面是一个包含字符串长度的short.我不知道如何将它打包成一个简单的char []数组,也不知道如何将我的简单字符串转换为修改过的UTF-8数组.
  3. 即使我知道如何将我的数据转换为big-endian并创建修改后的UTF-8字符串,我仍然不知道如何将其打包到char []数组中并将其作为包发送.我之前所做的只是简单的HTTP网络,它是纯ASCII.

解释,链接,相关的功能名称和简短的片段非常感谢!

编辑

现在回答1和3.用户470379在下面回答了图1.这个AWESOME线程回答了3,它解释了我想要做的很好:http://cboard.cprogramming.com/networking-device-communication/68196-sending-non-char*-data.html我不确定关于修改后的UTF-8但是.

c++ binary networking minecraft

4
推荐指数
1
解决办法
3034
查看次数

帮助使用perlin噪声库libnoise

当我用x,y和z作为整数调用libnoise的getvalue函数时,结果总是得到0.这是正常的吗?当我在教程http://libnoise.sourceforge.net/tutorials/tutorial2.html中尝试1.25,0.75,0.5时,我得到了0.686347的预期结果.具体来说,我已经尝试过20岁以下的整数.我只是不明白这是如何工作的?

任何帮助是极大的赞赏.

c++ procedural-generation terrain perlin-noise minecraft

4
推荐指数
1
解决办法
2484
查看次数

自动在"System.out.println()"语句中显示日期

我知道您打印的每一行都可以用日期标记(并且还保存为日志文件).

例如在Minecraft中:

[16:21:43 INFO]: Minecraft Launcher 1.3.9 (through bootstrap 5) started on windows...
Run Code Online (Sandbox Code Playgroud)

我怎么做?也许和Logger一起?或者是否需要外部图书馆?

java minecraft

4
推荐指数
1
解决办法
2463
查看次数

修改单个玩家的消息

我正在写一个Minecraft插件,当你在聊天中提到他的名字时会通知某人.他将收到一条定制的消息,在消息中,他的名字加下划线并重新收录.它还会播放音乐笔记.

我有这个,但它会将消息发送给服务器中的每个人:

@Override
public void onEnable()
{
    Bukkit.getServer().getPluginManager().registerEvents(this, this);
}

@Override
public void onDisable()
{

}


 @EventHandler
 public void onChat(AsyncPlayerChatEvent e)
 {
     for(Player on:Bukkit.getServer().getOnlinePlayers())
     {
         if(on.equals(e.getPlayer()))continue;


         if(e.getMessage().contains(on.getName()))
         {
             e.setMessage(e.getMessage().replaceAll(on.getName(), ChatColor.GREEN + "@" + ChatColor.UNDERLINE + on.getName()));
             on.playNote(on.getLocation(), Instrument.PIANO, Note.natural(1, Tone.A));
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

java minecraft bukkit

4
推荐指数
1
解决办法
2899
查看次数

Minecraft 块部分如何存储

我目前正在制作一个 Minecraft 块操作程序,我想知道 Minecraft 块部分是如何存储的。

来自Minecraft Wiki 文章,了解 Minecraft 如何存储其区块

部分:复合标签列表,每个标签都是一个子块。

一个单独的部分。

Y:该部分的 Y 索引(不是坐标)。范围 0 到 15(从下到上),没有重复项,但如果为空,某些部分可能会丢失。

块:定义地形的 4096 字节块 ID。每块 8 位,加上 ? 来自下面的添加标签的位。

添加:可能不存在。2048 字节的附加块 ID 数据。添加到(组合)上述块 ID 以形成 0 到 4095 范围内的真实块 ID 的值。每个块 4 位。组合是通过将该值移至左侧 8 位,然后将其添加到上面的块 ID 来完成的。

数据:2048 字节的块数据另外定义了部分地形。每块 4 位。

BlockLight:2048字节记录每个块中块发射的光量。与加载时重新计算相比,加载时间更快。每块 4 位。

SkyLight:2048 字节记录照射到每个块的阳光或月光量。每块 4 位。

但我不明白怎么Blocks读。块中的每个部分都是 16 x 16 x 16 块。但 Minecraft 将块存储在一数组的一个部分中。

chunks minecraft

4
推荐指数
1
解决办法
2790
查看次数

Java API在单独的JAR文件中

我正在制作一个带有API的Spigot minecraft插件,以允许其他开发人员加入它.如何在单独的JAR文件中创建API,其功能与插件本身相同?

我需要这个,因为插件不会公开分发,但我需要允许访问其中的某些方法/类/对象.

期望的结果:Plugin.jar正在服务器上运行.我将Plugin-API.jar放在Maven存储库中,供其他开发人员使用,以便与plugin.jar进行交互.

我对创建自己的API一般都很陌生,因此非常感谢完全解释的响应.谢谢!

java api plugins minecraft bukkit

4
推荐指数
1
解决办法
636
查看次数

Bukkit 饥饿事件?

我正在尝试制作一个插件来消除 Minecraft 中的饥饿感。但是,我找不到它的事件!

当玩家失去饥饿时是否有一个事件?

PlayerHungerChangeEvent什么?

minecraft bukkit

4
推荐指数
1
解决办法
1068
查看次数

C# 向 Minecraft 发送按键输入以移动玩家

我正在尝试将键盘输入发送到 Minecraft 以移动播放器,但是当我尝试使用时SendKeys.SendWait("W");什么也没有发生。如果我在 Minecraft 中打开聊天,它会在聊天中输入“W”,但是在聊天之外我的输入似乎被忽略了。谢谢。

编辑:我试过使用SendInput以及InputSimulator两者都具有相同的效果。

c# sendkeys minecraft

4
推荐指数
2
解决办法
1722
查看次数

如何读取 Minecraft .mca 文件以便在 python 中提取单个块?

我找不到一种可以在 python 中使用的方式读取 Minecraft 世界文件的方法

我浏览了互联网,但找不到任何教程,只有几个库声称他们可以做到这一点,但从未真正起作用

from nbt import *
nbtfile = nbt.NBTFile("r.0.0.mca",'rb')
Run Code Online (Sandbox Code Playgroud)

我预计这会起作用,但我收到了有关文件未压缩或类似内容的错误

完整错误:

Traceback (most recent call last):
  File "C:\Users\rober\Desktop\MinePy\MinecraftWorldReader.py", line 2, in <module>
    nbtfile = nbt.NBTFile("r.0.0.mca",'rb')
  File "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib\site-packages\nbt\nbt.py", line 628, in __init__
    self.parse_file()
  File "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib\site-packages\nbt\nbt.py", line 652, in parse_file
    type = TAG_Byte(buffer=self.file)
  File "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib\site-packages\nbt\nbt.py", line 99, in __init__
    self._parse_buffer(buffer)
  File "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib\site-packages\nbt\nbt.py", line 105, in _parse_buffer
    self.value = self.fmt.unpack(buffer.read(self.fmt.size))[0]
  File "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib\gzip.py", line 276, in read
    return self._buffer.read(size)
  File "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib\_compression.py", line 68, in readinto
    data = self.read(len(byte_view))
  File "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib\gzip.py", …
Run Code Online (Sandbox Code Playgroud)

python file-handling minecraft

4
推荐指数
1
解决办法
3468
查看次数

通过 localhost 连接到 Minecraft 服务器

我尝试为您连接的 Minecraft 服务器创建一个代理服务器,这样您就可以修改 Minecraft 协议和/或其他内容。

我尝试做一个像这样的 TCP 代理服务器,它将套接字重定向到给定的地址:

var net = require("net");

process.on("uncaughtException", function(error) {
  console.error(error);
});

if (process.argv.length != 5) {
  console.log("usage: %s <localport> <remotehost> <remoteport>", process.argv[1]);
  process.exit();
}

var localport = process.argv[2];
var remotehost = process.argv[3];
var remoteport = process.argv[4];

var server = net.createServer(function (localsocket) {
  var remotesocket = new net.Socket();

  remotesocket.connect(remoteport, remotehost);

  localsocket.on('connect', function (data) {
    console.log(">>> connection #%d from %s:%d",
      server.connections,
      localsocket.remoteAddress,
      localsocket.remotePort
    );
  });

  localsocket.on('data', function (data) {
    console.log("%s:%d - writing data to remote",
      localsocket.remoteAddress, …
Run Code Online (Sandbox Code Playgroud)

javascript proxy tcp node.js minecraft

4
推荐指数
1
解决办法
1093
查看次数