我正在为我的世界创建一个命令行客户端.有关该协议的完整规范,可在此处找到:http://mc.kev009.com/Protocol.要事先回答你的问题,是的,我有点像C++菜鸟.
我在实现这个协议时遇到了各种各样的问题,每个问题都很关键
解释,链接,相关的功能名称和简短的片段非常感谢!
编辑
现在回答1和3.用户470379在下面回答了图1.这个AWESOME线程回答了3,它解释了我想要做的很好:http://cboard.cprogramming.com/networking-device-communication/68196-sending-non-char*-data.html我不确定关于修改后的UTF-8但是.
当我用x,y和z作为整数调用libnoise的getvalue函数时,结果总是得到0.这是正常的吗?当我在教程http://libnoise.sourceforge.net/tutorials/tutorial2.html中尝试1.25,0.75,0.5时,我得到了0.686347的预期结果.具体来说,我已经尝试过20岁以下的整数.我只是不明白这是如何工作的?
任何帮助是极大的赞赏.
我知道您打印的每一行都可以用日期标记(并且还保存为日志文件).
例如在Minecraft中:
[16:21:43 INFO]: Minecraft Launcher 1.3.9 (through bootstrap 5) started on windows...
Run Code Online (Sandbox Code Playgroud)
我怎么做?也许和Logger一起?或者是否需要外部图书馆?
我正在写一个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) 我目前正在制作一个 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 将块存储在一维数组的一个部分中。
我正在制作一个带有API的Spigot minecraft插件,以允许其他开发人员加入它.如何在单独的JAR文件中创建API,其功能与插件本身相同?
我需要这个,因为插件不会公开分发,但我需要允许访问其中的某些方法/类/对象.
期望的结果:Plugin.jar正在服务器上运行.我将Plugin-API.jar放在Maven存储库中,供其他开发人员使用,以便与plugin.jar进行交互.
我对创建自己的API一般都很陌生,因此非常感谢完全解释的响应.谢谢!
我正在尝试制作一个插件来消除 Minecraft 中的饥饿感。但是,我找不到它的事件!
当玩家失去饥饿时是否有一个事件?
像PlayerHungerChangeEvent什么?
我正在尝试将键盘输入发送到 Minecraft 以移动播放器,但是当我尝试使用时SendKeys.SendWait("W");什么也没有发生。如果我在 Minecraft 中打开聊天,它会在聊天中输入“W”,但是在聊天之外我的输入似乎被忽略了。谢谢。
编辑:我试过使用SendInput以及InputSimulator两者都具有相同的效果。
我找不到一种可以在 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) 我尝试为您连接的 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)