差别
这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
javamodding:7_productions [2022/04/10 16:03] – 创建 硫缺铅 | javamodding:7_productions [2022/04/12 14:11] (当前版本) – [狂暴绘制] 硫缺铅 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== 工厂 ====== | ||
+ | 我们写mod,最简单易上手的就是工厂了,作为一个科技类游戏,工厂总是不可缺少的一环。接下来我们就使用Java写工厂,并学习制作自定义渲染和特效。 | ||
+ | |||
+ | 注:本文一切代码没有经过实验,都是硫缺铅的颅内实验,如果有误,欢迎大家随意修改。 | ||
+ | ===== 注册 ===== | ||
+ | 首先,在ModBlocks类中,我们新建一个静态字段。为了写一个能出入物品和液体的工厂,这次我们需要将类型设置为 '' | ||
+ | < | ||
+ | public class ModBlocks implements ContentList { | ||
+ | public static Wall ironWall; | ||
+ | public static GenericCrafter implosionCompressor; | ||
+ | @Override | ||
+ | public void load() { | ||
+ | ironWall = new Wall(" | ||
+ | implosionCompressor = new GenericCrafter(" | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | 接下来,我们需要给他添加一些**必须**的字段,如果你有json/ | ||
+ | < | ||
+ | implosionCompressor = new GenericCrafter(" | ||
+ | requirements(Category.crafting, | ||
+ | new ItemStack(Items.titanium, | ||
+ | new ItemStack(Items.copper, | ||
+ | new ItemStack(Items.lead, | ||
+ | new ItemStack(Items.silicon, | ||
+ | }); | ||
+ | outputItem = new ItemStack(ModItems.iron, | ||
+ | craftTime = 60f; | ||
+ | size = 3; | ||
+ | hasItems = true | ||
+ | consumes.items( | ||
+ | new ItemStack(Items.titanium, | ||
+ | new ItemStack(Items.blast-compound, | ||
+ | ); | ||
+ | hasLiquids = true; | ||
+ | consumes.liquid(Liquids.cryofluid, | ||
+ | hasPower = true; | ||
+ | consumes.power(80f); | ||
+ | }}; | ||
+ | </ | ||
+ | 大部分变量字段在本站的[[modding: | ||
+ | * requirements现在是一个语句,它有三个参数: | ||
+ | - 建筑菜单有十大类别,在游戏内可建造的方块**必须在其中**,和json一样,写错了就会直接报错。// | ||
+ | - 建筑可视性不是必须的,详见'' | ||
+ | - 最后一个才是真正的建筑花费,通常来说你不会只用一种物品而且数目为1,所以写一个ItemStack是必不可少的。// | ||
+ | * comsumes变成了一个类,他有三个方法,分别是items,liquid,power。// | ||
+ | ===== 加载顺序 ===== | ||
+ | **在使用一个东西之前,确保已经注册了它。**在模组里的工厂使用了模组里的物品,就一定要保证ModItems类先于ModBlocks加载。出现了这种使用,就称ModBlocks依赖于ModItems,那个工厂依赖于那个物品。 | ||
+ | |||
+ | 如果在之后的编程中出现了两个类互相依赖,可以通过拆分类的方法解决。// | ||
+ | ===== 贴图 ===== | ||
+ | 正常来说,游戏内的一格是32*32大小的,但是,这并不意味着不符合这个大小的贴图无法加载,只是会出现错位的现象,下面教学如何通过更换渲染方法来修复错位,并添加一些炫到爆炸的贴图特效。 | ||
+ | |||
+ | 注:这里**暂时**没有贴图和实例,将来**可能会添加**,可能会出现与客观事实不符的现象,欢迎随意修改。 | ||
+ | |||
+ | ==== 狂暴绘制 ==== | ||
+ | 在原版中,负责绘制方块的是'' | ||
+ | |||
+ | 首先,我们需要新建一个类,命名为'' | ||
+ | |||
+ | 接下来,我们需要从DrawBlock继承过来(为什么不是直接写?),重载draw(GenericCrafter.GenericCrafterBuild)的方法。 | ||
+ | |||
+ | < | ||
+ | |||
+ | public class RotateDraw extends DrawBlock { | ||
+ | @Override | ||
+ | public void draw(GenericCrafter.GenericCrafterBuild) { | ||
+ | // | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | 然后,在方块里添加一个'' | ||
+ | |||
+ | 当然,如果就这么写简直就是编程界的撒旦,理由是你完完全全没有做到**复用**代码,接下来我们来看看如何从这个渲染类中抽出能抽出去的东西。 | ||
+ | |||
+ | 在旋转渲染类中,我们可以抽出去旋转速度、移动时间、悬停时间,以及悬停xy偏移量,那么我们就可以写成这样: | ||
+ | < | ||
+ | |||
+ | public class RotateDraw extends DrawBlock { | ||
+ | public float rotateSpeed, | ||
+ | @Override | ||
+ | public void draw(GenericCrafter.GenericCrafterBuild) { | ||
+ | // | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | 这样,我们就成功的抽象出去了一些东西,记得把原来的drawer加点参数: | ||
+ | |||
+ | drawer= new RotateDraw(3f, | ||
+ | 这样,我们就在创造出了一个可以按需修改的渲染,在之后的编写中,我们可以任意使用这个渲染类,只需要更改参数就可以了。 | ||
+ | |||
+ | ==== 逊毙特效 ==== | ||
+ | |||
+ | 看Fx类,挑一个做填空题,去做实验,然后把结果告诉大家。 | ||
+ | |||
+ | 也可以新建freedomMod.Fx类,自己用draw画特效,可以耦合,也可以高度自定义,再用静态字段声明。 | ||
+ | |||
+ | // | ||
+ | |||
+ | |||
+ | 至此我们写了一点基本的东西,接下来我们可以写一点更逊的东西。 | ||
+ | |||
+ | ===== 此处没有示例 ===== | ||
+ | |||
+ | |||