从现在开始我们就要开始真正写代码了,还没有来得及配置环境的同学可以参考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是必须的,另外的SizeMetadata是可选的。

  • ItemType表示物品或方块的类型,在forge中使用BlocksItems表示。
  • 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编程入门二 “工艺和食谱”的更多相关文章

  1. Minecraft Forge编程入门三 “初始化项目结构和逻辑”

    经过前面两个教程Minecraft Forge编程入门一 "环境搭建"和Minecraft Forge编程入门二 "工艺和食谱",我们大体知道了如何自定义合成配 ...

  2. Minecraft Forge编程入门一 “环境搭建”

    什么是Forge Minecraft Forge is a Minecraft application programming interface (API) which allows almost ...

  3. 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

    1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...

  4. [转帖]脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

    脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?     http://www.52im.net/thread-1732-1-1.html   1.引言 本文接上篇<脑残式网 ...

  5. Kafka.net使用编程入门(二)

    1.首先创建一个Topic,命令如下: kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partit ...

  6. IM开发者的零基础通信技术入门(二):通信交换技术的百年发展史(下)

    1.系列文章引言 1.1 适合谁来阅读? 本系列文章尽量使用最浅显易懂的文字.图片来组织内容,力求通信技术零基础的人群也能看懂.但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获.如果您大 ...

  7. 脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?

    本文引用了“帅地”发表于公众号苦逼的码农的技术分享. 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢 ...

  8. 脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?

    本文引用了公众号纯洁的微笑作者奎哥的技术文章,感谢原作者的分享. 1.前言   老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天.实时音视频等)时,如果发现网络连接超时,第一时间想到的就是 ...

  9. 脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)

    本文原作者阮一峰,作者博客:ruanyifeng.com. 1.前言 新一代HTTP/2 协议的主要目的是为了提高网页性能(有关HTTP/2的介绍,请见<从HTTP/0.9到HTTP/2:一文读 ...

随机推荐

  1. js错误处理和调试

    1.重点关注函数和可能导致函数执行失败的因素. 2.抛出错误和使用try-catch的时机:一般来说在应用程序架构较低的层次中经常会抛出错误.这个层次并不会影响当前执行的代码. 错误也得不到真正的处理 ...

  2. swiper动态加载数据滑动失效,ajax执行后swiper.js的效果消失问题

    使用swiper.js做一些动效时,如果进行了ajax,并且重新把DOM写入到HTML代码中,会导致swiper.js的特效消失的问题.原因是ajax加载后,原先new 的Swiper对象,不认识新来 ...

  3. 三款免费的PHP加速器:APC、eAccelerator、XCache比较

    前几天给 Nova 的缓存系统添加了 Memcache 支持.但是这玩意儿对个人博客系统来说可能不太合适(哪天 XKLog 推出多用户版本了可能会派上用场),事实上,就我自己试用而言,单机情况下使用 ...

  4. [svc][op]pip安装ansible && yum安装python34

    相对yum安装,pip安装的好处是jinjia版本到了2.8 pip安装ansible Successfully installed MarkupSafe-1.0 PyYAML-3.12 ansibl ...

  5. CCNA2.0笔记_ACL

    要点: 1.按顺序执行,一旦某条语句匹配,后续语句不再处理. 2.默认ACL 结尾语句是deny any,所以你要记住的是在ACL 里至少要有1 条permit 语句. 3.记得创建了ACL 后要把它 ...

  6. hadoop 调试mapperduce

    问题描述 运行hadoop的MapReduce示例,在running job卡住 在页面中显示一直处于 ACCEPTED Applications 状态 修改日志级别export HADOOP_ROO ...

  7. VSCode 创建项目常用命令

    对 http://www.bkjia.com/Asp_Netjc/1233276.html 的补充 1. 创建HelloWorld.Solutions目录并且在此目录中创建sln解决方案 例:dotn ...

  8. IOS中的多线程和NSRunLoop概述(转载)

    线程概述 有些程序是一条直线,从起点到终点,如Hello World,运行打印完,它的生命周期便结束了:有些程序是一个圆,不断循环,直到将它切断,如操作系统,一直运行直到你关机.  一个运行着的程序就 ...

  9. docker构建测试环境

    构建测试环境首先要根据自己的需求,构建出适合自己项目的image,有了自己的image,就可以快速的搭建出来一套测试环境了. 下边就说一下构建image的两种方式. 1.DOCKFILE创建文件夹:m ...

  10. 【转】Python 第三方 http 库-Requests 学习

    原文地址:http://www.itwhy.org/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B/python/python-%E7%AC%AC%E4%B8%89%E6%9 ...