周边教程MinecraftMOD制作-从入门到精通_第1页
周边教程MinecraftMOD制作-从入门到精通_第2页
周边教程MinecraftMOD制作-从入门到精通_第3页
周边教程MinecraftMOD制作-从入门到精通_第4页
周边教程MinecraftMOD制作-从入门到精通_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

...wd......wd......wd...第一章学习Javajava是什么java是一门计算机语言,我相信很多人都知道这一事实,这很可能是由于您曾经玩过由这一语言编译而成的游戏。Java是一门面向对象的计算机语言,也就是说它由两主要局部组成:字段和方法。那什么是字段和方法呢我们以人为例:我们可以把一个人比作一个工程〔o(∩_∩)o好似有些类比不当~〕。在这个工程中会有许多包,比方“human.body.head〞。在每个包中会包含好多类〔我们之后详细阐述〕,比方说"ear.java"就是一个类。现在我们已经知道了字段和方法,那么什么是类呢我们以之前的ear.java为例,这个耳朵类可以诸如“耳垂高度〞和“音量〞等特征,所以一个解决方案是建设如“listenTo()〞和"moveEars()"等函数。您可能会问这到底是什么呀,也可能会问这些和Minecraft到底有神马关系好吧,以下就是一个例子:方法/函数举例publicintgetMaxHealth(){

return20;}复制代码这是minecraft中EntityCreeper.java中的一段代码。这段代码非常基本,您只需关心的是如果把返回值20改为其它的什么东西会发生什么呢当然您有可能会猜想:嗯,有可能会带来我砍苦力怕多少刀它会死呢其中的"public"表示其它的类也可以调用该函数,"int"表示该函数为整型函数〔在+/-2,147,483,647之间的所有十进制整数〕。"getMaxHealth()"为函数名,"return20"表示返回值,比方如果有人问这个类:“苦力怕的最大生命值是多少呀〞,它将答复:“是20~〞。由于我们在函数头声明了"int",所以我们的返回值必须为整数。字段/变量举例privatedoublevelocityY;复制代码这是在EntityMinecart类中所生命的一个字段。其中"private"表示只有这个类才可以访问这个字段,"double"表示为一个十进制数,"velocityY"为这个变量的变量名〔字段和变量有时表示同一个东西〕。以上就是关于Java的一些最基本的知识。网络上还有许许多多更为优秀的Java教程,所以就不再花时间赘述了。相关教程:TheNewBoston'sJava(Beginner)ProgrammingTutorialsTheJavaTMTutorials第二章方案与头脑风暴再次强调,这一章非常重要,有许多准备制作MOD的人士“天赋异禀〞,最后全都“楼主我要整合包〞了。您应该对于这个MOD最终能够实现什么功能、您能做到什么程度有一个明确的方案。可以在脑中对MOD进展简单地规划,或者对于每一项您所要添加的工程列出一份长达10页的清单,这都可以,取决于您个人的习惯。需要牢记的事情:从简单之处做起!我见过好多好多人再问楼主类似的问题:“若何让NPC自动建筑、谈话、打猎、去杀末影之龙呀〞。MOD制作是一个长期的过程,您也不可能马上就成为高手。正如我之前谈过的,您可以通过学习一些Java根基知识来了解一些知识,这样可以使您更快地成为高手。所以说要从简单之处入手,先试着为Minecraft添加一个方块吧。要有兴趣!请注意,为您喜欢的游戏制作MOD并不应该成为您的一份工作,在MOD制作之时您应该能获得成就感与愉悦。虽然当您不能修正错误,或者您的MOD的反响没有预想中高时难免会灰心丧气,但这只是一时之举。如果您经常性地感到厌倦并没有从中获得乐趣,或许玩Minecraft更加适合您吧……——第二章到此完毕——第三章:设置工作环境在这章开场之前呢,我们需要提一下forge。我个人相对比modloader而言更倾向于forge。您可以在安装之前阅读关于Forge与modloader之间的对比,但是记得总结。有许多工具有助于提高您MOD的兼容性并使您的MOD制作之路更为轻松。Forge可以通过更新支持不同的版本但是modloader只支持对应的版本。所以不要犹豫通过安装FML和其他一些工具,您可以不需要安装那繁多的API。如果您有任何问题,请移驾至并参加#MinecraftForge。请参阅本文::///thread-71071-1-1.html准备文件在工作环境中,您需要一份纯洁的.minecraft文件夹。可以通过备份您当前.minecraft文件夹,并通过点击"forceupdate"来获得纯洁的minecraft文件下载您在开场MOD制作之前还需要下载一下这三样东西:最新版本的Eclipse::///downloads/packages/eclipse-ide-java-developers/junor最新版本的MinecraftForgeSRC::///最新版本的MCP:://mcp.ocean-labs.de/index.php/MCP_Releases设置工作环境首先将MCP解压缩至您所希望的位置,我个人的习惯是在桌面新建一个名为"Mods"的文件夹,并将MCP解压缩至那里。ForgeSRC的下载文件应该会是一个单独的名为"forge"的文件夹,将其解压缩至MCP目录下的“jars〞文件夹里〔其实只需要Bin和resources文件夹……但是无妨〕。由于Forge不在依赖modloader,所以您不再需要安装modloader了。如果您方案制作支持多人存在模式〔SSP〕的MOD,您必须要在:///download下载minecraft_server.jar文件,也放在前文所述的"jars"文件夹中,如以以以下图所示:现在返回MCP目录下的“forge〞文件夹,运行"installd"文件,如果您操作系统不同文件名字也不同。稍等片刻,安装完毕后我们继续……收尾工作如果您在运行install.bat或者install.sh文件时没有任何错误,您现在应该可以开场您的大师之路了。返回Mcp/eclipse文件夹中,复制文件夹的地址,如:X:UsersMitchDesktopModsNewModMCPeclipse。现在您可以通过在您文件解压缩至您所希望的位置的方式安装eclipse。安装完毕之后通过双击eclipse.exe的方式运行eclipse,当系统问及您的工作环境时,粘贴之前您复制的Mcp/eclipse文件夹的位置。当加载完毕后,需要您找到“Client/src/net.minecraft.src/〞的位置。第四章:您等待已久的一章我希望您能多加阅读一些Minecraft的代码,虽然对于一个java造诣不精人来说,代码有可能显得凌乱,但是不要灰心丧气。第一节:您的第一个方块通过在net.minecraft.src包内右击任意文件,点击New->Class。将其命名为“mod_YOURMODNAME〞,必须确保其以“mod_〞开头,因为只有这样系统才会识别该文件为一个MOD并开场加载。无需在底部选择任何的选项,点击"Finish"完成创立。此时您会看见一段预先写好的类代码。您的第一件事就是要扩展这个MOD使之成为一个基本类〔BaseMod〕。您可以通过添加“extendsBaseMod〞这样的代码完成类的声明,此时代码如下:packagenet.minecraft.src;publicclassmod_YourModNameextendsBaseMod{}复制代码当然,此时会在“mod_YOURMODNAME〞处显示错误,此时将鼠标移至该错误处,在弹出的对话框中单击“Addunimplementedmethods〞。此时会在当前的基本类里添加两个类函数:“load〞与“getVersion〞。您可以删除掉“//TODO〞这种行,在“getVersion〞类函数中,您需要将null替换为〞1.0“或者其他您喜欢的版本号。您需要保存引用,就如同需要返回一个字符串一样。此时的代码如下所示:packagenet.minecraft.src;publicclassmod_YourModNameextendsBaseMod{

@Override

publicStringgetVersion(){

return"1.0";

}

@Override

publicvoidload(){

}}复制代码现在您终于可以开场创作您的第一份方块代码啦~在类的顶端添加以下代码〔在“{}〞之内〕:publicstaticBlockyourFirstBlock=newBlockTutorial(blockID,0).setHardness(2.5F).setStepSound(Block.soundWoodFootstep).setBlockName("blockName");复制代码其中:名称含义public表示所有类均可以访问。static表示在类内不创立一个新的实例的条件下即可访问〔详情请查阅java教程〕Block该变量引用“Block.java〞yourfirstBLock变量名,叫什么都行=newBlockTutorial此时在BlockTutorial类中创立了一个新的实例,由于我们之前没有声明,因此会出错。您可以将其改为任何您喜欢的名字,只要之后的名字与其一样就可以了。(blockID,0)

您所传递给BlockTutorial类的信息,就是方块ID。您可以在这里将其替换成您所希望的任何数值。特别提醒您,在最新版本的Forge中,可以自动调整您的方块ID,并将其设置到137到4096中的一个未使用过的数值。您可以在这里查看您的MOD与MOD的兼容性。之后的0稍后会为您详细阐述,现在暂且放过它。.setHardness(2.5F)设置该方块的硬度为2.5,您可以随意调整。.setStepSound(Block.soundWoodFootstep)

走在上面的声音,如果您喜欢的话,也可以将“soundWoodFootstep〞改成“soundClothFootstep〞或者任何你喜欢的声音。.setBlockName("blockName");这个变量无关紧要,只是要保证每个的名字不同就可以了。现在您已经掌握了若何新建一个BlockTutorial类了,当然有可能在之前您就把这个名字改掉了……现在我们要扩展方块,我们首先需要执行ITextureProvider,当您将如下代码复制进其中时,可以使鼠标悬停在ITextureProvider处并单击导入〔import〕。publicclassBlockTutorialextendsBlockimplementsITextureProvider{复制代码现在我们需要为我们之前跳过的那局部创立一个构造函数〔可以在java教程中获得更为详实的信息〕。publicBlockTutorial(inti,intj){

super(i,j,Material.wood);}复制代码名称含义BlockTutorial由于是构造函数,此处需与类的名字一样。(inti,intj)我们在之前使用(blockID,0)的声明。更为详细的来说,表示该构造函数使用两个整数变量并将其命名为i和j。super表示需要使用超类来传递方块信息,这也是问什么我们扩展这个类的缘故。可能难以理解但是请参阅java教程o(∩_∩)o~~(i,j,Material.wood);这是由我们的MOD类中继承的将要传给方块的参数,我们同时也传递了Material.wood是因为我希望这个方块在被镐敲击时可以更为容易地被破坏。好,现在您即将进展的步骤是添加一个Forge的类函数以便我们可以为这个方块设置材质。publicStringgetTextureFile(){

return"/Mic'sMods/CrossbowMod/gui/Crossbow.png";}复制代码切记:不要更改类函数的第一行!乱修改可能覆盖或者替换类函数。这是一个用于十字弓MOD的例子,其中的材质存储在minecraft.jar的相应位置中。您可以很轻松地修改您所使用的材质,但是如果指向一个空位置则无法进展加载。当然也要保证是双引号~最后还需要一个Forge的类函数将该方块添加至创造模式的物品栏中。publicvoidaddCreativeItems(ArrayListitemList){if(blockID==mod_YourModName.yourFirstBlock.blockID)

{

itemList.add(newItemStack(this));

}}复制代码当鼠标悬停至ArrayList时可以导入。最后一个类函数可能有些复杂……名称含义void表示该函数没有返回值addCreativeItems(ArrayListitemList)类函数和构造函数的名字。不要进展修改,否则会覆盖Forge的类函数。if(根据真假不同返回值也不同,如果不懂请多看看教程blockID==mod_YourModName.yourFirstBlock.blockID逻辑表达式,如果该方块的方块ID与您创立的方块的方块ID则继续itemList.add(newItemStack(this));

在创造模式中可以创立和堆叠这一方块,这条语句不懂亦无妨。之后,我们在load()类函数中添加如下语句:ModLoader.registerBlock(yourFirstBlock);ModLoader.addName(yourFirstBlock,"Woohoo!MyfirstBlock:D");复制代码其中:名称含义ModLoader.registerBlock您所调用的类函数(yourFirstBlock)您所使用的方块,确保之前声明过。ModLoader.addName调用另一个类函数,用于添加名字(yourFirstBlock,"Woohoo!MyfirstBlock:D");这里是为您的方块实例赋予名字的地方,您可以在这里写“红石灯〔RedstoneLamp〕〞,“楼主我要整合包~(LouzhuWoyaoZhengheBao)〞等等。现在要做一件最为重要的事请:hx940525,如果您要查看本帖隐藏内容请回复您已经为Minecraft制作了一个属于您的MOD,不再是MOD制作小白痴了!无论这个MOD多么粗糙和简陋,但都是您在MOD制作大师之路的一个见证!希望当您在成为大师之时蓦然回首还能记得您的第一份作品,无论若何,恭喜您!!!第四章:您等待已久的一章我希望您能多加阅读一些Minecraft的代码,虽然对于一个java造诣不精人来说,代码有可能显得凌乱,但是不要灰心丧气。第二节:为您的方块添加材质在这一局部教程中,将会为您讲述若何为您的方块添加材质。首先您需要一份默认的“子图〞。所谓“子图〞就是一份可以由程序在需要时可以随时加载的图片。在Minecraft中,可以从terrain.png和items.png中加载材质。实际上,依托于Forge,您所做的工作即为编辑一张属于您的terrain.png以及items.png并将您的MOD与这些子图之间建设联系。再次特意为您精心准备了两张默认的子图〔items.png、terrain.png〕。我们可以翻开编辑软件〔Photoshop、Gimp、Paint.NET〔译者强力推荐~〕〕,此时您可以看见256个紫色方块,现在需要做的就是按照您的喜好绘制图案。请牢记您的材质是16×16的,并且按照如下方式排列。您可能很好奇为什么是从0开场的呢好吧,还记得我们之前的“(blockID,0)〞吗其中的“0〞就是调用这个文件。如果我们在之前的文档中保持“0〞不变就会在加载子图之后您的方块将显示为蓝色的“0〞方块,如果我们在代码中将“0〞改为“1〞,则在最后您的方块将变为红色“1〞方块。当您绘制完您的方块材质后,您需要以png格式保存这份子图,否则Minecraft不会正确加载。还记得之前的“getTextureFile()〞类函数么,Forge虽然会自动进展寻找,但还请将子图与代码放在一系列的文件夹内。翻开“YourMCPFolder/jars/bin/minecraft.jar〞并将文件夹拖入其中,此时getTextureFile()就应该在minecraft.jar内找到您子图所在的位置。这可能有些晦涩难懂,所以我们需要测试一下您是否真正搞懂了。在我们运行客户端之前还有一件事需要进展:——需要Forge预加载材质。MinecraftForgeClient.preloadTexture("/New/Untitled-1.png");复制代码请确保您在类函数中所输入的文件地址与getTexture()所引用地址一样。我使用Forge客户端而不是用普通的forge类的原因是材质只是在客户端加载,不需要服务器端提供支持。现在您就应该看到您的那个大大的0方块啦~P.S:默认的子图文件下载地址在这里第四章:您等待已久的一章我希望您能多加阅读一些Minecraft的代码,虽然对于一个java造诣不精人来说,代码有可能显得凌乱,但是不要灰心丧气。第三节:创立一份合成表在这一节,我将为您讲述若何创立一份合成表,本章不会有任何下载内容O(∩_∩)O~当您已经成功地掌握了前两节的内容,您就已经基本掌握了制作MOD的基本知识。现在需要为那些奋斗在存在模式的人们考虑了~本节内容十分简单,仅调用一个类函数。所以您可以尝试一下能否自己一个人搞清楚代码,我会将释义附在后面。当然,这些代码完全可以一行写完,但是写成这样子更为直观,就好似您在用工作台进展合成一样。ModLoader.addRecipe(newItemStack(yourFirstBlock),newObject[]{

"BBB",

"BAB",

"BBB",

Character.valueOf('A'),Item.diamond,

Character.valueOf('B'),Block.obsidian});复制代码您看懂了么➤您当然也可以在合成中使用您自己创立的方块或物品,举例来说,"Character.valueOf('A'),yourFirstBlock"即代表之前所述的“A〞为您所创立的方块。如以以以下图所示:以下为一些在编写合成公式时的小技巧:您可以使用空格代表工作台中的空位。

"DDD",

"I",

"I",复制代码您可以简化合成公式,这样子无论原材料在工作台内若何放置,只要形状正确即能合成〔木板合成工作台就是一例〕

"BB",

"BB",复制代码您可以只使用单一原材料进展合成,也就是说放入一个该方块或物品即可合成您所希望的物品。"Z",复制代码第四章:您等待已久的一章

我希望您能多加阅读一些Minecraft的代码,虽然对于一个java造诣不精人来说,代码有可能显得凌乱,但是不要灰心丧气。第四节:生成矿藏

现在您可以能会想若何制作一份矿藏呢如果您希望制作一份矿藏,请不要为其设置可以进展合成的要素,毕竟矿藏是不能合成出来的。建议您重新为自己的矿物方块设计一套材质,毕竟在许多灰色的石头中间突然挖到一个蓝色大方块很是诡异。您可以根据自己使用photoshop或Gimp的水平进展创作,甚至直接拷贝原版材质并加以修改其中的色调和饱和度也是一个不错的而选择.还记得我们在教程之前提到的".setHardness(2.5F)"么在制作矿藏时这一参数也需要考虑在内:0.1F意味着几乎可以瞬间摧毁该方块,而1000.0F则意味着您可以挖到天荒地老。还有一点请注意,此处与您实际进展采矿无任何相关,我们稍后会进展讲解。我们使用generateSurface()类函数对modloader类函数进展覆盖,当生成世界时就会调用这个类函数,并生成您所添加进类函数的语句。以下代码将用于您的mod_file:

OverridingTheModLoaderMethod➤@OverridepublicvoidgenerateSurface(Worldworld,Randomrandom,intchunkX,intchunkZ){

}复制代码

再次强调,不要做任何修改,因为您的任何改动都会带来不可知的结果。

现在需要再去中添加一个循环语句:

GenerationForLoop➤for(inti=0;i<20;i++){

intrandPosX=chunkX+random.nextInt(16);

intrandPosY=random.nextInt(20);

intrandPosZ=chunkZ+random.nextInt(16);

newWorldGenMinable(this.yourFirstOre.blockID,8).generate(world,random,randPosX,randPosY,randPosZ);}复制代码名称]含义for(..)表示循环,详情请参阅java教程inti=0;i<20;i++默认的循环语句,您只需要关心其中的“20〞就可以了,如果您将其设置为1就代表该矿物如同钻石一样珍惜,而将其设置为20则代表如同煤那样广泛分布,您可以将其最大设置为50左右。intrandPosX=chunkX+random.nextInt(16);表示矿藏确实切位置其中变量randPosX用于存储矿藏的X坐标,而矿脉的实际位置则由1到16的一个随机数与区块位置共同决定。不要更改其中的16!intrandPosY=random.nextInt(20);矿脉的y坐标由1到20的一个随机数决定,您可以将20改为任何一个正值,比方矿石就将其设置为16而煤则为128。intrandPosZ=chunkZ+random.nextInt(16);矿脉的Z坐标由变量randPosZ确定,矿脉的实际位置则由1到16的一个随机数与区块位置共同决定。不要更改其中的16!newWorldGenMinable为WorldGenMinable类中添加一个新的实例,该实例主要用于控制生成(this.yourFirstOre.blockID,8)控制您所生成矿脉的最大矿石数量,最小值为3亦即每个矿脉只生成1块矿石.generate在WorldGenMinable中调用generate类函数。(world,random,randPosX,randPosY,randPosZ)''world''为生成世界的名称,可以由delaration类函数提供;''Random''为java的随机场,也由delaration类函数提供;"Random''X,Y,Z为三个整值变量,用于控制矿脉的位置。

我们接下来设置矿藏的硬度等级,也就是说使用何种镐开采这一种矿藏,以下为典型矿石的硬度等级:黑曜石为3。钻石为2。铁矿石为1。在您的load()类函数中添加如下代码:

SettingHarvestLevel➤MinecraftForge.setBlockHarvestLevel(yourFirstOre,"pickaxe",3);复制代码

此时您的矿藏创立之旅就临近尾声,大家请欣赏我创造的超级恶劣材质的矿藏~

P.S:在您重新生成一个世界后〔也就是您更改了控制世界生成的变量〕如果出现错误,请先检查区块生成是否正确再行检查代码问题。~➤

d7z65.png

(118.59KB,下载次数:14)第四章:您等待已久的一章我希望您能多加阅读一些Minecraft的代码,虽然对于一个java造诣不精人来说,代码有可能显得凌乱,但是不要灰心丧气。第五节:添加烧炼与创立物品在这一节,我们将要为您在上一节创立的矿藏添加烧炼物,以锭为例,因为其相对较为简单。创立物品与创立方块相比非常类似,事实上我们只需要在方块/物品的代码中修改一点点的地方即可。我们这次需要创立一个物品对象。NewItemObject➤

publicstaticItemyourFirstItem=newItemTutorial(280).setIconIndex(0).setItemName("itemName");复制代码与方块相比,除去使用的对象和类不同外其余完全一样。我们此时并没有使用在构造体内添加子图的方法,而是使用.setlconindex(int)类函数,.setitemName与其一样,即使这些并没有在游戏中出现,但也应该与您的方块不同。现在我们创立ItemTutorial类,代码与前文所述BlockTutorial类的代码完全一样〔您可以自行更改类的名称〕。此时只需要扩展item类,注意并不需要覆盖addCreativeItems类函数。使用Modloader.addName()类函数、预加载子图〔如果您方块和物品使用不同子图重新预加载的话需要〕在load()函数中添加如下代码:Intoload()➤ModLoader.addSmelting(yourFirstOre.blockID,newItemStack(yourFirstItem));复制代码其中的第一个参数是输入端,亦即我们之前制作的那个方块,第二个参数为itemStack亦即我们通过熔炉烧炼出的您创立的物品。好啦,您的第一份物品已经通过熔炉烧炼而成了〔其实就是一个矿石锭~〕,这一章虽然简单,但是却对下一节的教程非常有用,下一节我们讲述若何制作工具

第四章:您等待已久的一章我希望您能多加阅读一些Minecraft的代码,虽然对于一个java造诣不精人来说,代码有可能显得凌乱,但是不要灰心丧气。

第四章第六节:创立一组工具在接下来的教程中,我们主要集中于讲述若何创立一组工具。这一节要比其他各节都要复杂,所以各位同学打起精神来~~首先,我们需要为新的工具创立一个EnumToolMaterial。在您的类中添加如下代码,注意不是在任何的类函数中。NewToolMaterial➤staticEnumToolMaterialBLUETOOLS=EnumHelper.addToolMaterial("BLUE",2,171,5F,1,5);复制代码名称含义

EnumHelper.addToolMaterial我们所引用的Forge类函数。如果您在此处出现错误,请手动导入net.minecraft.forge.EnumHelper。以下变量可以进展更改''BLUE''材料名称2您所设定的工具能够正常开采的硬度等级〔如黑曜石矿为3、钻石矿为2、铁矿为1〕171该工具的耐久度〔木质工具为59、钻石工具为1561〕5F使用该工具开采的速度,您可以根据如下数据进展大概地判断〔木质工具:2.0F,钻石工具为8.0F〕1该工具对实体所造成的伤害值,具体计算公式如下〔该数值+4〕÷2。〔如此时每击伤害为2.5颗心。〕5可附魔性,此处不确定〔石头为5、钻石为10、金为22〕第二步,我们需要创立一个新的物品对象:NewItems➤publicstaticItemblueStoneShovel=newBlueStoneSpade(ItemID1,BLUETOOLS).setIconIndex(0).setItemName("customShovel");publicstaticItemblueStonePickaxe=newBlueStonePickaxe(ItemID2,BLUETOOLS).setIconIndex(1).setItemName("customPickaxe");publicstaticItemblueStoneAxe=newBlueStoneAxe(ItemID3,BLUETOOLS).setIconIndex(2).setItemName("customAxe");publicstaticItemblueStoneHoe=newBlueStoneHoe(ItemID5,BLUETOOLS).setIconIndex(4).setItemName("customHoe");publicstaticItemblueStoneSword=newBlueStoneSword(ItemID4,BLUETOOLS).setIconIndex(3).setItemName("customSword");复制代码此时会报错,这是由于还没有新建类。BlueStoneSpade我们接下来所要创立的类的名字(ItemID1,BLUETOOLS)为您的铲子所设置的物品ID。请记得为您每一个工具都设置一个不同的物品ID!BL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论