donizyo
首先向Anjocaido致敬。众所周知,由于Weley Wolfe的传票,我们再也无法合法地下载水桶服了。

值得庆幸的是,MCP依然存在,Forge依然存在。那么服主们只要通过MCP和Forge实现Bukkit API,并对自己喜爱的Plugin稍作修改,便可以让自己的服务器继续延续下去。这样的方法,我本人也是第一次尝试,如有纰漏,请多海涵。

首先,我们要从MCP官网下载用于反编译1.8版本minecraft的MCP,即MCP 9.10。然后从Minecraft官网下载官方Minecraft服务器。
将刚下载的 minecraft_server*.jar 复制到MCP目录下的 jars 目录中,然后回到上层,运行decompile.bat。(虽然官方提供了bash文件,但我并不建议在非Windows平台下使用MCP)稍作等待,直到MCP完成反编译工作。MCP可能会有如下的输出:
  1. == MCP 9.10 (data: 9.10, client: 1.8, server: 1.8) ==
  2. "scalac" is not found on the PATH.  Scala files will not be recompiled
  3. # found ff, ff patches, srgs, name csvs, doc csvs, param csvs, astyle, astyle co
  4. nfig, rg, ss
  5. Looking in 河蟹 for mc installs... OK
  6. Copying assets... OK
  7. Parsing JSON file... OK
  8. Looking for minecraft main jar... Not found
  9. Copying minecraft main jar... OK
  10. > Checking libraries...
  11.         Copying library jinput... OK
  12.         Copying library lwjgl-platform... OK
  13.         Copying library icu4j-core-mojang... OK
  14.         Copying library twitch-external-platform... OK
  15.         Copying library trove4j... OK
  16.         Copying library httpcore... OK
  17.         Copying library log4j-api... OK
  18.         Copying library commons-lang3... OK
  19.         Copying library libraryjavasound... OK
  20.         Copying library jopt-simple... OK
  21.         Copying library guava... OK
  22.         Copying library commons-logging... OK
  23.         Copying library commons-compress... OK
  24.         Copying library twitch... OK
  25.         Copying library codecjorbis... OK
  26.         Copying library soundsystem... OK
  27.         Copying library librarylwjglopenal... OK
  28.         Copying library lwjgl_util... OK
  29.         Copying library commons-codec... OK
  30.         Copying library httpclient... OK
  31.         Copying library lwjgl... OK
  32.         Copying library commons-io... OK
  33.         Copying library realms... OK
  34.         Copying library authlib... OK
  35.         Copying library gson... OK
  36.         Copying library vecmath... OK
  37.         Copying library netty-all... OK
  38.         Copying library codecwav... OK
  39.         Copying library twitch-platform... OK
  40.         Copying library jinput-platform... OK
  41.         Copying library log4j-core... OK
  42.         Copying library jutils... OK
  43. > Checking Natives...
  44.         Extracting native avutil-ttv-51.dll... OK
  45.         Extracting native lwjgl.dll... OK
  46.         Extracting native OpenAL32.dll... OK
  47.         Extracting native jinput-dx8_64.dll... OK
  48.         Extracting native jinput-wintab.dll... OK
  49.         Extracting native twitchsdk.dll... OK
  50.         Extracting native jinput-dx8.dll... OK
  51.         Extracting native libmp3lame-ttv.dll... OK
  52.         Extracting native libmfxsw32.dll... OK
  53.         Extracting native OpenAL64.dll... OK
  54.         Extracting native jinput-raw_64.dll... OK
  55.         Extracting native swresample-ttv-0.dll... OK
  56.         Extracting native jinput-raw.dll... OK
  57.         Extracting native lwjgl64.dll... OK
  58. == Decompiling client using fernflower ==
  59. > Creating SRGs
  60. > Applying SpecialSource
  61. > Applying MCInjector
  62. > Creating renamed srg
  63. > Filtering classes
  64. > Decompiling
  65. > Unpacking jar
  66. > Copying sources
  67. > Applying fernflower fixes
  68. > Applying patches
  69. > Cleaning comments
  70. - Done in 226.84 seconds
  71. == Reformating client ==
  72. > Cleaning sources
  73. > Replacing OpenGL constants
  74. > Reformating sources
  75. - Done in 13.06 seconds
  76. == Updating client ==
  77. > Adding javadoc
  78. > Renaming sources
  79. - Done in 9.98 seconds
  80. == Decompiling server using fernflower ==
  81. > Creating SRGs
  82. > Applying SpecialSource
  83. > Applying MCInjector
  84. > Creating renamed srg
  85. > Filtering classes
  86. > Decompiling
  87. > Unpacking jar
  88. > Copying sources
  89. > Applying fernflower fixes
  90. > Applying patches
  91. > Cleaning comments
  92. - Done in 114.80 seconds
  93. == Reformating server ==
  94. > Cleaning sources
  95. > Reformating sources
  96. - Done in 8.57 seconds
  97. == Updating server ==
  98. > Adding javadoc
  99. > Renaming sources
  100. - Done in 7.02 seconds
  101. == Recompiling client ==
  102. > Cleaning bin
  103. > Recompiling
  104. - Done in 12.55 seconds
  105. > Generating client md5s
  106. == Recompiling server ==
  107. > Cleaning bin
  108. > Recompiling
  109. - Done in 10.71 seconds
  110. > Generating server md5s
  111. 请按任意键继续. . .
复制代码
到此为止,我们完成了实现Bukkit API的第一步。你可以在MCP目录下的src目录中找到刚刚反编译的服务端。


donizyo
现在我们用NetBeans创建一个叫MineBukkit的项目,将位于[MCP root]/src/minecraft_server中的目录全部复制到MineBukkit项目的src目录中。
同时我们还需要Bukkit API,而你可以从Github上找到含有源代码的压缩包。将压缩包里Bukkit-master/src/main/java中的内容全部解压到MineBukkit项目的src目录中。
做完这些,你也许会在打开NetBeans查看项目的瞬间崩溃,因为项目中有不计其数的错误提示。而我这第二天的日记就主要着重抓虫子的过程。
项目中会出现的错误主要有缺失依赖库错误和反编译错误。缺失依赖库错误很容易解决,你只需要将.minecraft目录下的所有库导入到项目中,并根据实际情况,将相应的库升级到更高版本。
反编译错误则较为复杂,我将在下一楼中集中解释。

【参考】
[1]Bukkit API: https://github.com/Bukkit/Bukkit

4one_R
然而实现水桶服毫无意义,spigot就是针对水桶的强化版。而且buildtools亦会自动下载编译后的bukkit jar

第一页 上一页 下一页 最后一页