Minecraft Forge编程入门二 “工艺和食谱”
从现在开始我们就要开始真正写代码了,还没有来得及配置环境的同学可以参考Minecraft Forge编程入门一 “环境搭建”这篇文章来进行环境搭建。
工艺(Craft)和食谱(Recepe)
所谓的工艺和食谱是指在Minecraft中物品的合成和合成表。
工艺:指由一种或几种物品合成出另外一种物品,
如常见的火把的合成:

食谱:泛指物品合成的摆放顺序。有有形和无形两种,其中有形要求合成时物品间的相对位置不能变即形状不变,无形则只要求物品满足条件即可对形状没要求。
如指南针的合成是有形的:

稍微改变一下任何一个物品的顺序就无法合成了:

无形的食谱较少,当合成材料是一个的时候,可以说他是有形也可以说是无形。

或者

合成前的基础知识
ItemStack
在Minecraft中每种类型的方块和物品都不是多实例的,可以理解为你看到的土块在游戏内存中只是一个实例而已。这样做的目的显而易见,就是为了减少内存占用。
那如果我要表示一块土块要怎么做呢?
ItemStack dirtStack = new ItemStack(Blocks.dirt);
n块土块呢?
ItemStack dirtStack = new ItemStack(Blocks.dirt,n);
那如果不是土块而是羊毛呢?大家都知道羊毛是有颜色之分的?
ItemStack woolStack = new ItemStack(Blocks.wool, 2, 15);
ItemStack的构造方法大只就这三种,总结一下起语法:
ItemStack stack = new ItemStack((Object)ItemType,[(int)Stack Size],[(Object) Metadata]);
其中ItemType是必须的,另外的Size和Metadata是可选的。
- ItemType表示物品或方块的类型,在forge中使用
Blocks和Items表示。 - Size表示物品或方块的数量。
- Metadata表示ItemType对应物品或方块的附加属性。
如果ItemType是羊毛Blocks.wool的话,Metadata就表示羊毛的颜色,Metadata取十进制Dec行的值。羊毛颜色如下:

由于在后面可能大量用到不同种类的ItemStack,这里我们定义一个java类,专门用来提供一些常用的ItemStack。
package com.zql.mc.zmod.itemstack;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
/**
*
* @author scott 定义一些常用的物品组
*/
public class ArticleStacks {
/**
* 钻石 * 1
*/
public final static ItemStack DIAMOND_STACK_1 = getItemStack(Items.diamond, 1);
/**
* 土块 * 1
*/
public final static ItemStack DIRT_STACK_1 = getItemStack(Blocks.dirt, 1);
/**
* 沙子 * 1
*/
public final static ItemStack SAND_STACK_1 = getItemStack(Blocks.sand, 1);
/**
* 羊毛 * 1 橙色
*/
public final static ItemStack WOOL_ORANGE_1 = getItemStack(Blocks.wool, 1, 1);
/**
* 羊毛 * 1 黄色
*/
public final static ItemStack WOOL_YELLOW_1 = getItemStack(Blocks.wool, 1, 4);
/**
* 羊毛 * 1 黑色
*/
public final static ItemStack WOOL_BLACK_1 = getItemStack(Blocks.wool, 1, 15);
/**
*
* @param item
* 物品
* @param count
* 物品数量
* @return
*/
public static ItemStack getItemStack(Item item, int count) {
return new ItemStack(item, count);
}
/**
*
* @param block
* 方块
* @param count
* 方块数量
* @return
*/
public static ItemStack getItemStack(Block block, int count) {
return new ItemStack(block, count);
}
/**
*
* @param block
* 方块
* @param count
* 方块数量
* @param metaData
* 元数据,如方块是羊毛Wool的话,metaData的值是0~15,表示不同的颜色。
* @return
*/
public static ItemStack getItemStack(Block block, int count, int metaData) {
return new ItemStack(block, count, metaData);
}
}
读者也可以根据自己的需求往里面加不同的ItemStack。
无形合成配方
无形合成配方对物品或方块的顺序位置没有要求。
首先看一下添加无形合成配方的语法:
GameRegistry.addShapelessRecipe(ItemStack result, Object... recipe);
其中result表示合成结果,... recipe表示配方数组。
下面我们看一个简单的例子,用一个土块和一个沙块来合成一个钻石,
Minecraft Forge编程入门二 “工艺和食谱”的更多相关文章
- Minecraft Forge编程入门三 “初始化项目结构和逻辑”
经过前面两个教程Minecraft Forge编程入门一 "环境搭建"和Minecraft Forge编程入门二 "工艺和食谱",我们大体知道了如何自定义合成配 ...
- Minecraft Forge编程入门一 “环境搭建”
什么是Forge Minecraft Forge is a Minecraft application programming interface (API) which allows almost ...
- 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?
1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...
- [转帖]脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?
脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么? http://www.52im.net/thread-1732-1-1.html 1.引言 本文接上篇<脑残式网 ...
- Kafka.net使用编程入门(二)
1.首先创建一个Topic,命令如下: kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partit ...
- IM开发者的零基础通信技术入门(二):通信交换技术的百年发展史(下)
1.系列文章引言 1.1 适合谁来阅读? 本系列文章尽量使用最浅显易懂的文字.图片来组织内容,力求通信技术零基础的人群也能看懂.但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获.如果您大 ...
- 脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?
本文引用了“帅地”发表于公众号苦逼的码农的技术分享. 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢 ...
- 脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?
本文引用了公众号纯洁的微笑作者奎哥的技术文章,感谢原作者的分享. 1.前言 老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天.实时音视频等)时,如果发现网络连接超时,第一时间想到的就是 ...
- 脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)
本文原作者阮一峰,作者博客:ruanyifeng.com. 1.前言 新一代HTTP/2 协议的主要目的是为了提高网页性能(有关HTTP/2的介绍,请见<从HTTP/0.9到HTTP/2:一文读 ...
随机推荐
- JavaScript点击按钮显示 确认对话框
//JavaScript点击按钮显示确认对话框 <html xmlns="http://www.w3.org/1999/xhtml"> <head> < ...
- NoSQL(三)
redis集群介绍 1.官方叫cluster,redis3.0才直接的一个架构,如果数据量很大,单台机器已经无法满足存储,查询的瓶颈,所以我们需要多台机器构成一个大集群,用来解决存储空间,查询速度,负 ...
- 设置iptables允许ssh、http、ftp服务
系统环境:centos-6.5 服务器:thinkserver 知识扫盲: NEW:这个包是我们看到的第一个包 ESTABLISHED:一个连接要从NEW变 为ESTABLISHED,只需要接到应答包 ...
- EHCache 在WEB项目的使用方法
EHCache 是一个纯java的在进程中的缓存,它具有下面特性:高速,简单,为Hibernate2.1充当可插入的缓存,最小的依赖性,全面的文档和測试.官方站点http://ehcache.sour ...
- MySQL主从同步那点事儿
一.前言 关于mysql主从同步,相信大家都不陌生,随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时,将数据库的读写效率骤然下降,甚至不可用;为了解决此类问题,通 ...
- 用Doxygen+Graphviz生成函数调用流程图(转)
源文链接: http://wildpointer.net/2012/04/14/doxygen_graphviz/ 上面这张图是用Doxygen+Graphviz从netcat的源代码生成的函数调用关 ...
- Selenium操作之滚动条
在用Selenium做UI自动化时,经常会遇到有些元素找不到之类的问题,但是自己的代码并没有错,元素就是找不到,这是为什么呢?原因很简单,由于页面内容较多,有些内容需要下拉滚动条才会显示,这里介绍一种 ...
- Unix系统编程(三)通用的I/O
UNIX IO模型的显著特点之一是输出输出概念的通用性,这意味着,4个同样的系统调用open,read,write和close可以对所有类型的文件执行IO操作,包括终端之类的设备.因此仅用这些系统调 ...
- Ubuntu Apache配置及开启mod_rewrite模块
刚刚将服务器系统从CentOS换成Ubuntu,将MySQL,Apache,PHP和Wordpress安装好后,发现打开主页是正常的,但是打开文章页面时出现错误.因为使用了自定义的固定链接设置,那自然 ...
- 第一周python入门
第一编程语言的分类: 1.机器语言 二进制编程 直接操作硬件 优点:执行速度快 缺点:开发效率低 面向机器编程 2.汇编语言 英文标签代替一串特定的二进制,直接操作硬件 缺点开发效率低 面向 ...