【MC】谁能帮我和一个MC我的世界mod客户端端 还有我有MOD的版本运行怎么没反映

拥有2个小站,订阅0个话题,关注25个小站
环境:Minecraft 1.6.2 +MCP804 + Forge 9.10.0.781
本文翻译自Forge Wiki
A) 前期准备
拥有一个基础mod类
有一个就绪的物品或者方块类
一个绘图软件
B) 图标和材质Mine...&
环境:Minecraft 1.6.2 +&MCP804 + Forge 9.10.0.781
本文翻译自Forge Wiki
A) 前期准备
拥有一个基础mod类
有一个就绪的物品或者方块类
一个绘图软件
B) 图标和材质Minecraft 默认的材质大小是16x16(px),一般情况下材质都是(16x16),(32x32)或者两者都有如果你在调试的时候得到如下的错误,那么材质的高度和宽度就必须是一样的值
[SEVERE] [Minecraft-Client] Unable to parse animation metadata from generic:textures/items/genericItem.png: broken aspect ratio and not an animation
在Minecraft/MinecraftForge 1.6.1 材质都存储在它们自己的文件中并且在运行时才会拼合在一起,每一个方块或物品都会有一个材质文件会贴合在表面。不同的面有不同材质的方块,将会使用多个文件&C) 关于材质的额外说明首先,需要一个绘图软件来制作你的材质,png文件之后将材质文件放置到:
/assets/%modname%/textures/blocks/ (方块)
/assets/%modname%/textures/items/ &(物品)
%modname%是你的mod名称,是在代码中定义的,所有的字符必须都是小写,比如,你有一个mod叫&Generic&,那么在这个路径中需要写成&generic&
相关的代码将会分别的为方块和物品加载材质
方块和物品的加载过程稍有不同,物品使用func_111206_d,而方块使用func_111022_d
对于使用这样的方法最大的好处就是,它们能够在构造函数中被调用,同时也能在所属的类中被调用,亦或者在物品或方块变量在被初始化的时候
构造函数的设置
通过在构造函数中进行设置,才能够使一个材质和一个物品或者方块相对应
在方块的构造函数中添加:
func_111206_d("generic:genericItem");
如果是一个方块,在构造函数中添加:
func_111022_d("generic:genericBlock");
对于以上的代码,其中generic: 代表存在于/assets/文件夹下存储材质的文件夹
你必须在 \src\minecraft\ 下建立一个材质文件夹,另外需要在该材质文件夹下面建立两个文件夹,一个是&items&,另一个是&blocks"
func_111206_d会设置一个域为field_111026_f 即为通向你的材质的路径。
private&final&static&Item genericItem&=&new&GenericItem(5000).func_111206_d("generic:genericItem");
public&final&static&Item genericIngot&=&new&GenericItem(5001)& & & & & & & & .setMaxStackSize(16).setUnlocalizedName("genericIngot").func_111206_d("generic:genericIngot");
// 以上是对于Item的声明与设置方法
public&final&static&Block genericDirt&=&new&GenericBlock(500, Material.ground)
& & & & .setHardness(0.5F).setStepSound(Block.soundGravelFootstep)& & & .setUnlocalizedName("genericDirt").setCreativeTab(CreativeTabs.tabBlock).func_111022_d("generic:genericDirt");
环境:Minecraft 1.6.2 + MCP804 + Forge 9.10.0.781本文翻译自Forge WikiA) 基础知识对于物品和方块,有一个比较简单的区分方法,对于方块,这种性质的东西能够那在手里,并且能够被摆放到世界中,而对于物品来说,是无法被摆放到世界中的。像玫瑰花可以被种到地上,所以它属于方块,而相识镐啊锹啊什么的,虽然可以被扔到地上...&
环境:Minecraft 1.6.2 + MCP804 + Forge 9.10.0.781本文翻译自Forge Wiki&A) 基础知识对于物品和方块,有一个比较简单的区分方法,对于方块,这种性质的东西能够那在手里,并且能够被摆放到世界中,而对于物品来说,是无法被摆放到世界中的。像玫瑰花可以被种到地上,所以它属于方块,而相识镐啊锹啊什么的,虽然可以被扔到地上,但是却无法被摆放在世界上,所以它们属于物品所有的物品都有以下共同的属性:&&&&&&& Item ID&&&&&&& Stack Size&可以堆叠的个数&&&&&&& Icon Index&图标索引&&&&&&& Internal Name 内部的名称编号列表&&&&&&& In Game Name 在游戏内,可以让用户看到并且明白的名称&&&&&&& Creative Tab 在创造模式,该物品所处的分类标签&B) 一个普通物品的构建在基础类中,我们需要声明该物品的存在,并且需要给它分配一个物品ID,对于这个ID,最小是0,最大是32000所有的生成物品的类都要继承自Item类,它唯一的构造方法是protected类型,所以无法使用new Item(5000)这样的形式进行物品的创建创建物品类的代码如下:
package&tutorial.generic;
import&net.minecraft.item.Item;
public&class&GenericItem&extends&Item&{&
&&&&&&&&public&GenericItem(int&id)&{
& & & & & & & &&super(id);
& & & & & & & &&// TODO Auto-generated constructor stub
在此之后,你需要在基础类中添加以下代码:
private&final&static&Item genericItem&=&new&GenericItem(5000);
特别要注意的是,这个id在使用之后会被转换为内部的值,因此不要指望它能和你传进去的值是一样的,不过可以通过一个静态变量来获知,利用以下代码:
int&MyItemID&=&genericItem.itemID;&
C) 配置物品
到这个时候,我们拥有了一个物品,但是它还没有自己的名字,并且我们还没有办法在游戏中得到这个物品,因此我们就需要给这个物品制定一些属性,这些属性可以通过Item的方法来实现,由于这些方法都返回Item自己,所以可利用属性链的方式来实现。同时,你可以可以通过定义自己的构造函数,将这些属性值传递到类内部,在构造函数中进行设置
比如,可以在构造函数中添加:
// Constructor Configuration
setMaxStackSize(64);
setCreativeTab(CreativeTabs.tabMisc);
setUnlocalizedName("genericItem");
这三个方法的含义分别为:
&&&&&&& 第一个设定物品的最大堆叠数目为64
&&&&&&& 第二个设定该物品在创造模式所处的标签
&&&&&&& 第三个设置物品在游戏里面显示给用户的名字
同时,也可以通过方法链的形式来进行属性的设定:
private static final Item genericIngot = new&&&&&&& &&GenericItem(5001)&&&&&&& .setMaxStackSize(16)&&&&&&& .setCreativeTab(CreativeTabs.tabMisc)&&&&&&& .setUnlocalizedName("genericIngot");
在方法链中设定的属性将会覆盖在构造函数中的设定,因为这些方法是在构造方法之后被调用的,利用方法链,你可以在构造函数中设定默认值,而利用方法根据需要进行调整
出以上两种方式之外,还可以定义有多个参数的构造函数,以便在声明物品的时候就获得属性参数并进行设置,比如:
public&GenericItem(int&id,&int&maxStackSize, CreativeTabs tab,&int&texture,&String&name)&{
& & & &&super(id);
& & & & setMaxStackSize(maxStackSize);
& & & & setCreativeTab(tab);
& & & & setUnlocalizedName(name);
之后在基础类中就可以直接使用以下代码:&
public&static&final&Item genericIngot&=&new&GenericItem(5001,&16,
&&&&&& CreativeTabs.tabMisc,&1,&"genericIngot");&
这三种对属性进行设定的形式,可以根据需要进行选择&
C) 公共的名称
对于在上述代码中提到的setUnlocalizedName方法是无法设定一个人们能够看懂的名字的,因此在物品创建即将完毕的时候,需要指定一个能够让人们读懂的名称,因此要使用以下方法:&
LanguageRegistry.addName(Object&toName,&String&readableName);
LanguageRegistry.addName(genericItem,&"Generic Item");
LanguageRegistry.addName(genericIngot,&"Generic Ingot");&&
环境:Minecraft 1.6.2 +MCP804 + Forge 9.10.0.781
本文翻译自Forge Wiki
A) 关于物品掉落
在Minecraft的世界里,如果你想在破坏一个方块的时候得到该方块或者物品的掉落,就需要使用harvest level达到要求的工具对该方块进行采集,如果harvest level没有达到...&
环境:Minecraft 1.6.2 +&MCP804 + Forge 9.10.0.781
本文翻译自Forge Wiki
A) 关于物品掉落
在Minecraft的世界里,如果你想在破坏一个方块的时候得到该方块或者物品的掉落,就需要使用harvest level达到要求的工具对该方块进行采集,如果harvest level没有达到要求,那么在目标方块被破环之后,将不会有任何掉落
比如说,如果你想获得铁矿石,那么你至少要使用石搞来挖,才会掉落铁矿石,如果用木搞去挖,在铁矿石方块被破坏之后,将不会有任何掉落
Block类有一个idDropped函数,其定义如下:
public int idDropped(int metadata, Random random, int fortune){&&&&&&& return this.blockID;}
该函数有3个参数
&&&&&&&&metadata 第一个参数是方块的meta信息,具体的作用我不知道,应该是描述方块属性的值
&&&&&&& random 第二个参数是一个随机值,用来控制物品掉落的概率
&&&&&&& fortune 第三个参数是掉落物品的或者方块的id,从代码可以看出,如果没有指定这些属性,将会掉落自己
如果想要更改物品的掉落,需要在自定义的方块类中Overwrite这个方法
环境:Minecraft 1.6.2 + MCP804 + Forge 9.10.0.781
A)序本文翻译自MinecraftForge Wiki,给出了基础游戏方块的创建方法。
A)基础知识Minecraft世界绝大部分是由方块(block)组成的。每一个方块都有以下几个属性Block ID在游戏中,数字从0到4095用来标示方块,我们最好从...&
环境:Minecraft 1.6.2 + MCP804 + Forge 9.10.0.781&
A)&序本文翻译自Minecraft&Forge Wiki,给出了基础游戏方块的创建方法。&
A)&基础知识Minecraft世界绝大部分是由方块(block)组成的。每一个方块都有以下几个属性&&&&&&&&Block ID&在游戏中,数字从0到4095用来标示方块,我们最好从500开始,每添加一个方块增加1&&&&&&& Icon&展示给玩家的方块图标&&&&&&& Material 构成方块的材质&&&&&&&&Blast Resistance 爆炸抗性,即抵御爆炸的能力,比如苦力怕和TNT&&&&&&&&Luminance&物品的发光强度&&&&&&& Hardness 硬度,决定了要挖掘这个方块需要多少的时间&&&&&&& Creative&Tab&在创造模式,该方块所在的标签&&&&&&& Sounds&设定其它实体走在该种类方块上发出的声音&
B)&材料(Material)材料属性用来设定方块的以下特性:&&&&&&& 方块是否能够燃烧&&&&&&& 方块会不会掉落它自己&&&&&&& 方块会不会被推动,比如被一个活塞推动&&&&&&& 在地图上的颜色&&&&&&& 方块是不是半透明的(比如树叶方块)&&&&&&& 方块是不是地面的覆盖物(比如雪方块)完整的材料列表,可以在net.minecraft.src.Material中找到,对自己的方块,可以根据需要任意选择,同时还可以创建自定义的材料并投入使用。&
C) 普通方块的构建 (GenericBlock)我们可以不直接通过继承Block类的方式创造新的方块,而是先创建一个普通方块类,这个类是Block的子类,我们每一个新的方块,都将是这个普通方块类的实例。这样在设置方块材质贴图是比较方便。构建代码如下:
package tutorial.generic;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
public class GenericBlock extends Block
& & & & public GenericBlock (int id, Material material)
& & & & & & & & super(id, material);
& & & & @Override
& & & & @SideOnly(Side.CLIENT)
& & & & public void registerIcons(IconRegister iconRegister) {
& & & & & & this.blockIcon = iconRegister.registerIcon("Generic:" + (this.getUnlocalizedName().substring(5)));
}该类的构造方法直接调用了父类的构造方法,唯一需要更改的地方就是重写registerIcon函数,用来添加我们自己的材质文件,该方法只会在客户端运行。其他属性的设置都将在Mod基础类中通过方法链来完成。&
D) 普通泥土(GenericDirt)根据已经创建的GenericBlock类,来生产一个普通泥土的方块。在Mod基础类中声明并初始化一种方块,代码如下:
public final static Block genericDirt = new GenericBlock(500, Material.ground)
& & & & .setHardness(0.5F).setStepSound(Block.soundGravelFootstep)
& & & & .setUnlocalizedName("genericDirt").setCreativeTab(CreativeTabs.tabBlock);
如代码所示,通过构造函数,设置该方块的Block ID为500,并采用地面的材料。
用setHardness方法设置为0.5F,其范围在0.5F到50F之间,50F为黑曜石的硬度。
用setStepSound方法设置踩在方块上的声音。
用setUnlocalizedName为方块设置一个内部名称。
用setCreativeTab为方块在创造模式下设置分类标签。
其他的属性均被设置成默认值。
E) 方块的注册
方块需要被注册到Forge,需要在Mod基础类的load方法中运行相应的方法,代码如下:
GameRegistry.registerBlock(genericDirt, "genericDirt");
在你的Mod中,方块的内部名称必须是唯一的,并且应该与用setUnlocalizedName方法时指定的一致。这个字符串值用作字符串的映射,最终将替代当前id同block的映射。
F) 公共的名称
要注意的是通过setUnlocalizedName方法设置的内部名称不必采用人们能够理解的名字,可以是一个无厘头的字符串。如果希望在鼠标指针悬停在方块图标上的时候,能够显示一个名称,那么就需要指定公共的名称,这个名称需要是一个人们能够理解的名称,在Mod基础类的load方法中添加:
LanguageRegistry.addName(genericDirt, "Generic Dirt");
此处对象可以是一个方块、物品或者是物品堆栈。
G)&采集工具
到目前为止,如果当这个方块被创建,并摆放在Minecraft世界中,如果你想要采集这个方块,不管利用任何的工具,除了剑,采集过程都将话费1.5秒的时间,即便是利用一把锹。这个方块并不像是我们印象中的泥土方块。为了让它更像是常规的泥土,我们需要设定方块的采集级别属性。在load方法中添加:
MinecraftForge.setBlockHarvestLevel(genericDirt, "shovel", 0);
这个静态方法有三个参数,第一个是方块对象,第二个参数是工具类名称,第三个参数是级别。
工具类名称是"pickaxe","shovel","axe"中的一个,即分别是镐,锹和斧头。
级别有4个,0代表wood,1代表stone,2代表iron,3代表diamond
要注意的是,因为没有指定掉落方法,所以在用工具采集这个方块之后,不会得到相应方块。
环境:Minecraft 1.6.2 +MCP804 + Forge 9.10.0.781
A) 引本文翻译自MinecraftForge Wiki,给出了一个Mod的基础类结构。Mod基础类是由Forge进行加载的,并且你所有其他的类必须通过这个Mod基础类注册到Forge,因此在Mod开发过程中尽量让这个Mod基础类处于整个Mod的核心位置。因此通...&
环境:Minecraft 1.6.2 +&MCP804 + Forge 9.10.0.781&
A) 引本文翻译自Minecraft&Forge Wiki,给出了一个Mod的基础类结构。Mod基础类是由Forge进行加载的,并且你所有其他的类必须通过这个Mod基础类注册到Forge,因此在Mod开发过程中尽量让这个Mod基础类处于整个Mod的核心位置。因此通常情况下,建议这个基础Mod类就采用整个Mod的名称来命名。&
B)&Mod基础类,基本代码&
package tutorial.
import cpw.mon.M
import cpw.mon.Mod.I
import cpw.mon.Mod.I
import cpw.mon.Mod.PostI
import cpw.mon.Mod.PreI
import cpw.mon.SidedP
import cpw.mon.event.FMLInitializationE
import cpw.mon.event.FMLPostInitializationE
import cpw.mon.event.FMLPreInitializationE
import cpw.mon.network.NetworkM
@Mod(modid="Generic", name="Generic", version="0.0.0")
@NetworkMod(clientSideRequired=true, serverSideRequired=false)
public class Generic {
& & & & // The instance of your mod that Forge uses.
& & & & @Instance("Generic")
& & & & public static G
& & & & // Says where the client and server 'proxy' code is loaded.
& & & & @SidedProxy(clientSide="tutorial.generic.client.ClientProxy", serverSide="monProxy")
& & & & public static CommonP
& & & & @EventHandler
& & & & public void preInit(FMLPreInitializationEvent event) {
& & & & & & & & // Stub Method
& & & & @EventHandler
& & & & public void load(FMLInitializationEvent event) {
& & & & & & & & proxy.registerRenderers();
& & & & @EventHandler
& & & & public void postInit(FMLPostInitializationEvent event) {
& & & & & & & & // Stub Method
@Mod告诉Forge,这是一个Mod的基础类,用于注册Mod到Forge上。拥有三个参数&&&&&&&&modid 标识Mod的唯一名称,在你发布初始版本之后就不应该改变。&&&&&&& name&给Mod添加的人们能够理解的名字。&&&&&&&&version 这是Mod版本,模式随意。
@NetworkMod告诉Forge,当出现一个安装了某Mod的客户端去连接没有安装该Mod的服务器时该怎样处理有两个参数&&&&&&& clientSideRequired&如果你想让某个Mod,可以只在客户端运行,那么就指定为true&&&&&&& serverSideRequired&如果你想让装了某个Mod客户端连接到没有安装该Mod的服务器,那么应该指定为false,否则将无法登陆该服务器。
@InstanceMod基础类,是一个单例,是Forge使用的Mod对象的引用。只有一个参数,并且要保证和@Mod注记下的modid相一致,否则将会被默认为空字串,如果有其他的Mod也有同样的问题,被默认为空字串,就会出问题。
@SidedProxy用于决定,在服务器或客户端是否在运行的不同状态下,Forge要加载哪些类。你可以在任何地方使用这个注记。该注记有两个参数&&&&&&& clientSide&为客户端加载的完整的类名字串。&&&&&&& serverSide&为服务器端加载的完整的类名字串。
@EventHandler用于调用所有的方法。这是在1.6系列版本中的变化。(对应于以往的@PreInit,@Init 和 @PostInit,FMI事件没有改变,只是注记变了)&
C)&代理类,即Proxy&ClassesMinecraft使用的是客户端与服务器的设定,即便是在单人游戏中。服务器端负责所有保存世界状态的相关工作,而客户端则负责世界的渲染工作。除非你另行设置,所有的Mod代码都是运行于客户端与服务器两端的。有两个注记能够指定代码只运行于客户端或服务器其中一端。如果你想让服务器端调用某个类的构造函数,而让客户端调用另一个,那么可以使用@SidedProxy注记。在这一过程中,分别被服务器和客户端调用的两个类,必须是同一类型或父子类型。在调用过程中,类名由字符串传递。可参见Mod基础类代码,在初始化之后,客户端与服务器端则会根据传递的字符串调用相应的类。利用代理来注册图片,和修订图形界面。首先创建一个服务器端的代理类:&
package tutorial.
public class CommonProxy {
& & & & // Client stuff
& & & & public void registerRenderers() {
& & & & & & & & // Nothing here as the server doesn't render graphics or entities!
&接着是客户端的代理类:&
package tutorial.generic.
import net.minecraftforge.client.MinecraftForgeC
import monP
public class ClientProxy extends CommonProxy {&
& & & & @Override
& & & & public void registerRenderers() {
& & & & & & & & // This is for rendering entities and so forth later on
& & & & }&& &
} &不论是客户端还是服务端的代理类,存放的位置,都应该与@SidedProxy中的参数一致。&
开心大陆已经开放啦!
在线的Miner拍个照,这一群都太不配合了。
另外只有我还是赤身果体,不能忍!!为什么我MC(1.7.10下了同一个版本的MOD不能用_百度知道
为什么我MC(1.7.10下了同一个版本的MOD不能用
这是一道待解决的难题
您的回答被采纳后将获得系统奖励20(财富值+经验值)+难题奖励30(财富值+经验值)
我有更好的答案
按默认排序
如果你是在纯净的1.7.10下下载M俯敞碘缎鄢等碉劝冬滑OD,则是未安装Forge等一系列的模组加载插件或是安装路径的问题(.mincraft/mods)。建议您下载简单整合包(只含小地图,Forge,TMI的整合包),将MOD拖入mods文件夹中
还是弄不好。你有1.7.10的版本。而且可以用mod的么?
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 mc客户端崩溃 的文章

 

随机推荐