首发于Enaium的个人博客
添加大型工艺品
机器也算是大型工艺品,所以我们需要先添加它的大型工艺品。
这里做一张16x32
格式为png
的图。
csharp
if (e.Name.IsEquivalentTo("Data/BigCraftables"))
{
e.Edit(assets =>
{
var dict = assets.AsDictionary<string, BigCraftableData>();
dict.Data["Awesome_Orearium"] = new BigCraftableData
{
Name = "Awesome_Orearium",
DisplayName = "Orearium",
Description = "Insert a ore of your choice and it will grow copies.",
Texture = "Awesome_Orearium"
};
});
}
if (e.Name.IsEquivalentTo("Awesome_Orearium"))
{
e.LoadFromModFile<Texture2D>("assets/Orearium.png", AssetLoadPriority.Medium);
}
添加机器
在Data/Machines.json
中我们可以看到所有机器的信息,我们就仿照着宝石复制机做一个矿石复制机。
csharp
if (e.Name.IsEquivalentTo("Data/Machines"))
{
e.Edit(assets =>
{
var dict = assets.AsDictionary<string, MachineData>();
dict.Data["(BC)Awesome_Orearium"] = new MachineData
{
OutputRules = new List<MachineOutputRule> {
new() {
Id = "Default",
Triggers =
new List<MachineOutputTriggerRule>() {
new() {
Id = "OutputCollected",
Trigger = MachineOutputTrigger.OutputCollected,
RequiredCount = 1
},
new() {
Id = "CopperOre",
Trigger = MachineOutputTrigger.ItemPlacedInMachine,
RequiredItemId = "(O)378"
},
new() {
Id = "IronOre",
Trigger = MachineOutputTrigger.ItemPlacedInMachine,
RequiredItemId = "(O)380"
},
new() {
Id = "GoldOre",
Trigger = MachineOutputTrigger.ItemPlacedInMachine,
RequiredItemId = "(O)384"
},
new() {
Id = "IridiumOre",
Trigger = MachineOutputTrigger.ItemPlacedInMachine,
RequiredItemId = "(O)386"
}
},
OutputItem = new List<MachineItemOutput>() {
new() {
Id = "Default",
ItemId = "DROP_IN"
}
},
MinutesUntilReady = 10,
}
},
ReadyTimeModifiers = new List<StardewValley.GameData.QuantityModifier>() {
new() {
Id = "CopperOre",
Condition = "ITEM_ID Target (O)378",
Modification = StardewValley.GameData.QuantityModifier.ModificationType.Multiply,
Amount = 1
},
new() {
Id = "CopperOre",
Condition = "ITEM_ID Target (O)380",
Modification = StardewValley.GameData.QuantityModifier.ModificationType.Multiply,
Amount = 2
},
new() {
Id = "CopperOre",
Condition = "ITEM_ID Target (O)384",
Modification = StardewValley.GameData.QuantityModifier.ModificationType.Multiply,
Amount = 3
},
new() {
Id = "CopperOre",
Condition = "ITEM_ID Target (O)386",
Modification = StardewValley.GameData.QuantityModifier.ModificationType.Multiply,
Amount = 4
}
}
};
});
}
首先我们需要添加一个输出规则,它有一些触发器,首先是OutputCollected
,它会将输出物品继续放入机器,接着是ItemPlacedInMachine
它可以指定只能让机器使用某些物品,比如放入矿石,它有一个RequiredItemId
属性,这表示只能放入指定的物品,这里多加了几个矿石,铜矿石、铁矿石、金矿石和铱矿石。之后是它的输出物品,它的物品ID是DROP_IN
,这表示它会复制放入的物品。最后是它的准备时间,这里是10分钟。之后我们可以使用ReadyTimeModifiers
属性来修改准备时间,它有一个Condition
属性,比如这里使用了ITEM_ID Target (O)378
,这表示如果放入的物品是铜矿石,Modification
也就是修改的类型,这里是Multiply
,Amount
也就是修改的倍数,这里是1,所以铜矿石的准备时间是10分钟,以此类推,铁矿石是20分钟,金矿石是30分钟,铱矿石是40分钟。
添加配方
csharp
if (e.Name.IsEquivalentTo("Data/CraftingRecipes"))
{
e.Edit(assets =>
{
var dict = assets.AsDictionary<string, string>();
dict.Data["Awesome_Orearium"] = "390 99 335 5 336 2 787 1/Home/Awesome_Orearium/true/default/";
});
}
这里使用99个石头、5个铁锭、2个金锭和1个电池制造一个矿石复制机。