Minecraft 1.19.2 Fabric模组开发 13.自定义村民
我们本次在模组中实现一个自定义村民并与其进行交易
效果演示 效果演示 效果演示
1.1.19版本村民职业获取需要一个所谓的职业方块,所以我们要先准备一个方块给村民进行职业获取:
在BlockInit中增加一个职业方块:
BlockInit.java
public class BlockInit {//职业方块public static final Block STOVE = registerBlock("gashapon" ,new StoveBlock(FabricBlockSettings.copy(Blocks.IRON_BLOCK).strength(1.5F, 4.0F).requiresTool().nonOpaque()),ModMain.ITEMTAB);private static Block registerBlockWithoutBlockItem(String name, Block block) {return Registry.register(Registry.BLOCK, new Identifier(ModMain.MOD_ID, name), block);}private static Block registerBlock(String name, Block block, ItemGroup group) {registerBlockItem(name, block, group);return Registry.register(Registry.BLOCK, new Identifier(ModMain.MOD_ID, name), block);}private static Item registerBlockItem(String name, Block block, ItemGroup group) {return Registry.register(Registry.ITEM, new Identifier(ModMain.MOD_ID, name),new BlockItem(block, new FabricItemSettings().group(group)));}public static void registerModBlocks() {System.out.println("Registering Mod Blocks for " + ModMain.MOD_ID);}}
在资源包的data包中添加对该职业方块的tag标签:
acquirable_job_site.json
{"values": ["joyggd:gas_poi"]
}
2.在Init包中新建一个VillagerInit类:
VillagerInit.java
package net.joy187.joyggd.init;import com.google.common.collect.ImmutableSet;
import net.fabricmc.fabric.api.object.builder.v1.trade.TradeOfferHelper;
import net.fabricmc.fabric.api.object.builder.v1.villager.VillagerProfessionBuilder;
import net.fabricmc.fabric.api.object.builder.v1.world.poi.PointOfInterestHelper;
import net.joy187.joyggd.ModMain;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryKey;
import net.minecraft.village.TradeOffer;
import net.minecraft.village.VillagerProfession;
import net.minecraft.world.poi.PointOfInterestType;public class VillagerInit {//该村民对应的职业方块设定public static final PointOfInterestType GAS_POI = registerPOI("gas_poi", BlockInit.STOVE);//该村民的职业设定public static final VillagerProfession GAS_MASTER = registerProfession("gasmaster",RegistryKey.of(Registry.POINT_OF_INTEREST_TYPE_KEY, new Identifier(ModMain.MOD_ID, "gas_poi")));public static VillagerProfession registerProfession(String name, RegistryKey<PointOfInterestType> type) {return Registry.register(Registry.VILLAGER_PROFESSION, new Identifier(ModMain.MOD_ID, name),VillagerProfessionBuilder.create().id(new Identifier(ModMain.MOD_ID, name)).workstation(type).workSound(SoundEvents.ENTITY_VILLAGER_WORK_ARMORER).build());}public static PointOfInterestType registerPOI(String name, Block block) {return PointOfInterestHelper.register(new Identifier(ModMain.MOD_ID, name),1, 1, ImmutableSet.copyOf(block.getStateManager().getStates()));}public static void registerVillagers() {ModMain.LOGGER.debug("Registering Villagers for " + ModMain.MOD_ID);}//可以与该职业下的村民交易什么物品public static void registerTrades() {TradeOfferHelper.registerVillagerOffers(GAS_MASTER,1,factories -> {factories.add(((entity, random) -> new TradeOffer(new ItemStack(Items.EMERALD, 20),new ItemStack(BlockInit.STOVE2, 1),6, 2, 0.02f)));});TradeOfferHelper.registerVillagerOffers(GAS_MASTER,1,factories -> {factories.add(((entity, random) -> new TradeOffer(new ItemStack(Items.EMERALD, 10),new ItemStack(ItemInit.ASSASSIN, 1),6, 2, 0.02f)));});TradeOfferHelper.registerVillagerOffers(GAS_MASTER,2,factories -> {factories.add(((entity, random) -> new TradeOffer(new ItemStack(Items.EMERALD, 15),new ItemStack(ItemInit.DRESS, 1),6, 20, 0.02f)));});}
}
交易参数说明
registerVillagerOffers(职业,交易等级,交易详情factories)
factories.add(拿什么换,换到了什么,最大交易次数,交易一次得到的经验奖励,激怒村民后涨价幅度)
在项目主类中添加VillagerInit的注册:
ModMain.java
public class ModMain implements ModInitializer {public static final String MOD_ID = "joyggd";public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);public static final ItemGroup ITEMTAB = FabricItemGroupBuilder.build(new Identifier(MOD_ID, "itemtab"), () -> new ItemStack(ItemInit.SHERIFF));@Overridepublic void onInitialize() {ModConfigs.registerConfigs();ItemInit.registerModItems();BlockInit.registerModBlocks();EffectInit.registerEffects();SoundInit.registerSounds();BlockEntityInit.registerAllBlockEntities();//添加这两个事件的注册VillagerInit.registerVillagers();VillagerInit.registerTrades();}
}
3.在资源包中添加职业名称:
en_us.json
"entity.minecraft.villager.gasmaster": "Gashapon Man",
在textures\entity\villager\profession
中添加该职业村民的皮肤:
4.保存代码进行测试:
Minecraft 1.19.2 Fabric模组开发 13.自定义村民相关推荐
- Minecraft 1.19.2 Fabric模组开发 07.自定义NBT标签
我们本次使用NBT标签来实现一个生物传送工具: 演示效果 演示效果 演示效果 Q:什么是NBT标签? A:NBT标签代表着物体的许多特性.玩家可以利用NBT标签存储生物(品种.是否无敌).物品(伤害加 ...
- Minecraft 1.19.2 Fabric模组开发 03.动画生物实体
我们本次尝试在1.19.2 Fabric中添加一个能够具有各种动画效果动作的生物实体. 效果展示 效果展示 效果展示 1.首先,为了实现这些动画效果,我们需要首先使用到一个模组:geckolib(下载 ...
- Minecraft 1.19.2 Fabric模组开发 02.物品栏+物品
我们本次在Fabric下创建自己模组中的物品栏和物品. 1.在Java包中新建一个init包,在init包中新建一个物品注册类ItemInit用于注册所有物品: ItemInit.java packa ...
- Minecraft 1.19.2 Forge模组开发 12.自定义鞘翅
本次我们在模组中实现一个可用于飞行的鞘翅. 1.首先参考3D动画盔甲的教程一.二步制作盔甲的模型.动画文件. 2.模型制作完成,接下来需要制作我们的盔甲类 在items包中新建armor包 -> ...
- Minecraft 1.19.2 Fabric模组开发 10.建筑生成
我们本次尝试在Fabric 1.19.2中生成一个自定义的建筑. 效果展示 效果展示 效果展示 由于版本更新缘故,1.19的建筑生成将不涉及任何Java包的代码编写,只需要在数据包中对建筑生成进行自定 ...
- Minecraft 1.19.2 Forge模组开发 05.矿石生成
我们本次尝试在主世界生成模组中自定义的矿石 1.由于1.19的版本出现了深板岩层的矿石,我们要在BlockInit类中声明一个矿石的两种岩层形态: BlockInit.java package com ...
- Minecraft 1.19.2 Forge模组开发 04.动画效果物品
我们本次实现一个具有动画效果的物品,本次演示的模型代码均在文末给出 效果演示效果演示效果演示 首先,请确保你的开发包中引入了geckolib依赖,相关教程请参考:Minecraft 1.19.2 Fo ...
- Minecraft 1.19.2 Forge模组开发 10.3D动画盔甲
Minecraft 1.16.5模组开发3D盔甲 Minecraft 1.12.2模组开发3D盔甲 Minecraft 1.18.2模组开发3D动画盔甲 我们本次在1.19.2的版本中实现具有动画效果 ...
- Minecraft 1.19.2 Forge模组开发 08.生物生成
Minecraft 1.18.2 生物生成 我们今天尝试在1.19中生成模组中的生物 效果演示效果演示效果演示 1.在你的项目主类中的commonSetup方法中添加模组中生物的生成规则(可参考文末M ...
最新文章
- Android app动态加载
- 2021年4月19日 深圳头条后台开发实习面试(二面)(含总结)
- Practical Lessons from Predicting Clicks on Ads at Facebook (2014)论文阅读
- DIV+CSS中标签ul ol li dl dt dd用法
- Cuboid特征提取算法
- [体感游戏]关于体感游戏的一些思考(三) --- 射击
- java异步处理同步化_java 异步查询转同步多种实现方式:循环等待,CountDownLatch,Spring Even...
- spring cloud 路由
- matplotlib学习笔记.CookBook
- Java 结构体之 JavaStruct 使用教程一 初识 JavaStruct
- C#: Writing a CookieContainer to Disk and Loading Back In For Use
- mysql java safe model_被 MySQL sql_mode 深深伤害( 中 )
- Java框架之SpringMVC 05-拦截器-异常映射-Spring工作流程
- Spring源码之bean的加载(五)准备创建bean
- QQ 木子版 vs 现在的某些修改版
- Egret + TiledMap 快速上手
- handlersocket mysql,MySQL插件HandlerSocket
- Hibernate annotation配置方式的MappedBy使用详解
- 电路实验---全桥整流电路
- quicktime不能成功安装
热门文章
- Uniapp|image无法显示图片
- 计算机以太网,局域网,互联网,令牌网,ATM网络
- 当老师帮学生作弊的时候
- C#多线程顺序依赖执行控制
- 王者荣耀在android目录下的名字,王者荣耀名字空白代码怎么弄_名字空白代码设置方法...
- 【ESP32-IDF】04-2 存储-NVS
- 2022LOL微博杯模糊问题,1080p高清看微博杯the shy比赛直播
- 【持续更新】2006-2023历代AMD 服务器Instinct桌面显卡列表,Instinct显卡发布日期
- Matlab中的persistent变量
- 【VS开发】免费打工仔:一个完善的ActiveX Web控件教程