一个模组在两个地方运行:
在服务器上进行实际的地图修改、库存更新等...
所有这些都在服务器上保存、处理和更新。
在客户端上进行所有渲染。这是生物移动、方块获取图像/纹理、播放声音等的地方。
现在服务器和客户端之间有一些重叠,因为客户端试图“预测”服务器上会发生什么(删除块,替换块)等......但是客户端预测将发生的chanes将被覆盖服务器向客户端推送块更新的时刻。
服务器始终领先。客户总是跟随。永远不要反过来。
如果它没有发生在服务器上,那么它根本就没有发生在其他玩家身上。
这就是为什么你要像if(!world.isRemote()) 这样检查你是否真的在服务器上。
尝试在服务器上保留修改世界的代码。它会自动将更新推送到客户端。做你的块替换,块挖掘,块设置为空气所有在一个
if(!world.isRemote()) {
world.setBlockToAir(new BlocPos(1,1,1));
// whatever world modifying code there is.
}
如果您需要进行客户端渲染,请在客户端完成所有操作。
为此使用客户端代理,并在正常代理中为该方法设置空方法,这些方法也会在服务器上执行。
阅读www.minecraftforge.net/wiki/Proxies
myMod.proxy.spawnSparklyThingies(new BlockPos(3,3,3));
做你只想在客户端渲染的事情。
当您在单人游戏世界中时,服务器和客户端是合并的。但是你应该对你的模组进行编码,就好像它们没有被合并一样,这样它们也可以在服务器上使用。
在eclipse下的run选项旁边是一个箭头,点击它可以选择运行一个服务器实例。
运行它,设置它(接受 eula.txt),然后启动一个客户端实例并连接到服务器以测试 yoru mod。
事情可能比这复杂得多,但这应该为您区分服务器和客户端提供了一个小的基础。