@nodecraft/rendermite 1.7.4 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -1
- package/dist/atlas/registry.d.ts +3 -3
- package/dist/atlas/sources.d.ts +1 -1
- package/dist/{atlas-pack-C56gzqAg.d.ts → atlas-pack-BUadroKy.d.ts} +1 -1
- package/dist/biomes-BGOF6gRM.js +1100 -0
- package/dist/biomes-CnnhDCnk.d.ts +59 -0
- package/dist/{blend-C5UYzink.d.ts → blend-mJAeQB3C.d.ts} +1 -1
- package/dist/block-behaviour-9Tj_GIUC.d.ts +632 -0
- package/dist/block-behaviour-D-SG2Xfp.js +155 -0
- package/dist/blocks/atlas-pack.d.ts +1 -1
- package/dist/blocks/biomes.d.ts +2 -2
- package/dist/blocks/biomes.js +2 -2
- package/dist/blocks/block-behaviour.d.ts +2 -0
- package/dist/blocks/block-behaviour.js +2 -0
- package/dist/blocks/block-entities.d.ts +3 -3
- package/dist/blocks/cli.js +1 -1
- package/dist/blocks/datapack.d.ts +2 -0
- package/dist/blocks/datapack.js +2 -0
- package/dist/blocks/ender-storage.d.ts +2 -2
- package/dist/blocks/entities.d.ts +3 -3
- package/dist/blocks/entity-geo.d.ts +1 -1
- package/dist/blocks/entity-models.d.ts +4 -4
- package/dist/blocks/entity-models.js +1 -1
- package/dist/blocks/entity-sizes.d.ts +25 -0
- package/dist/blocks/entity-sizes.js +2 -0
- package/dist/blocks/export.d.ts +1 -1
- package/dist/blocks/export.js +1 -1
- package/dist/blocks/game-rules.d.ts +2 -0
- package/dist/blocks/game-rules.js +2 -0
- package/dist/blocks/geo-blocks.d.ts +2 -2
- package/dist/blocks/item-sprites.d.ts +4 -4
- package/dist/blocks/light-bytecode.d.ts +2 -0
- package/dist/blocks/light-bytecode.js +2 -0
- package/dist/blocks/light-eval.d.ts +2 -0
- package/dist/blocks/light-eval.js +2 -0
- package/dist/blocks/light.d.ts +48 -0
- package/dist/blocks/light.js +2 -0
- package/dist/blocks/obj-mesh.d.ts +1 -1
- package/dist/blocks/pack-format.d.ts +2 -2
- package/dist/blocks/sprite-sheet.d.ts +3 -3
- package/dist/blocks/states.d.ts +2 -0
- package/dist/blocks/states.js +2 -0
- package/dist/blocks/tints.d.ts +1 -1
- package/dist/{classfile-Bo7FUrrD.js → classfile-CiIDF3vc.js} +23 -1
- package/dist/{classfile-BdLIk4Pe.d.ts → classfile-CsLXlh5z.d.ts} +23 -0
- package/dist/{cli-DBNuCnry.js → cli-xBcMuKA3.js} +11 -5
- package/dist/cli.js +7 -7
- package/dist/datapack-CmEg0Vko.d.ts +15 -0
- package/dist/datapack-D6eH46ay.js +71 -0
- package/dist/{descriptor-JyXhfd-c.js → descriptor-Dz2cR-BH.js} +2 -2
- package/dist/{discovery-Cmir3QfC.d.ts → discovery-DWe_kX8W.d.ts} +1 -1
- package/dist/dynamic/generators.d.ts +1 -1
- package/dist/{encode-Br_vPrd8.d.ts → encode-BNEYHHR0.d.ts} +1 -1
- package/dist/entities/classfile.d.ts +1 -1
- package/dist/entities/classfile.js +1 -1
- package/dist/entities/geo-model.d.ts +1 -1
- package/dist/entities/inherit.d.ts +2 -2
- package/dist/entities/inherit.js +1 -1
- package/dist/entities/jar-classes.js +1 -1
- package/dist/entities/link.d.ts +2 -2
- package/dist/entities/link.js +1 -1
- package/dist/entities/mappings.d.ts +2 -2
- package/dist/entities/mappings.js +2 -2
- package/dist/entities/model-bytecode.d.ts +7 -2
- package/dist/entities/model-bytecode.js +2 -2
- package/dist/entities/model-code.d.ts +1 -1
- package/dist/entities/model-code.js +1 -1
- package/dist/{entity-models-DUKiHpn1.js → entity-models-BYAxrTsk.js} +5 -5
- package/dist/entity-sizes-CpO1gA7p.js +194 -0
- package/dist/{export-Ds1EelMa.js → export-CbG2Rx3i.js} +73 -4
- package/dist/{export-B8tPsf4K.d.ts → export-HEoqcV-Y.d.ts} +19 -2
- package/dist/{face-DqEd9G_U.d.ts → face-uWXECGNr.d.ts} +2 -2
- package/dist/game-rules-DuLlFc7o.js +104 -0
- package/dist/game-rules-ThvdDG3B.d.ts +16 -0
- package/dist/{generators-BnIzAftW.d.ts → generators-hu_vk10m.d.ts} +1 -1
- package/dist/{geo-C9QYeLVN.d.ts → geo-DsWwuC5o.d.ts} +4 -4
- package/dist/index.d.ts +20 -20
- package/dist/index.js +8 -8
- package/dist/{inherit-BYLi3Q28.js → inherit-BUn0Cve9.js} +2 -2
- package/dist/items/blockstate.d.ts +1 -1
- package/dist/items/discovery.d.ts +1 -1
- package/dist/{jar-B5iRZQeL.d.ts → jar-4Jg7ufWK.d.ts} +1 -1
- package/dist/{jar-W2cV2ZVO.js → jar-DvofBm71.js} +2 -2
- package/dist/{jar-classes-3GVCJZT7.js → jar-classes-0wqWbTax.js} +2 -2
- package/dist/light-CC3VMsjl.js +614 -0
- package/dist/light-bytecode-DYxb6pJk.js +1799 -0
- package/dist/light-eval-BsJJoSv4.js +23 -0
- package/dist/light-eval-DMjK6xnb.d.ts +13 -0
- package/dist/{link-5GmBLTzk.js → link-Cuhyrz07.js} +1 -1
- package/dist/{loader-DSir1-P0.d.ts → loader-BYyPIs9f.d.ts} +1 -1
- package/dist/{loader-59_eMa8e.d.ts → loader-C4gsX_wO.d.ts} +1 -1
- package/dist/{manager-exOIcdyx.d.ts → manager-Ct0dEOMg.d.ts} +6 -0
- package/dist/{manager-BNibYkmI.js → manager-D6zXmFrO.js} +6 -0
- package/dist/{mappings-BEPVaiwE.js → mappings-DEl_7xxQ.js} +94 -9
- package/dist/{mappings-DxX4KoZl.d.ts → mappings-DhOPQTgV.d.ts} +33 -2
- package/dist/{model-bytecode-B43uSqet.js → model-bytecode-VaLUQfGO.js} +2 -2
- package/dist/{model-code-BY44ao27.d.ts → model-code-Csc3bs3h.d.ts} +1 -1
- package/dist/{model-code-1Vuk-zj_.js → model-code-DbN2uVhp.js} +1 -1
- package/dist/models/loader.d.ts +1 -1
- package/dist/{models-CZjCOjs4.js → models-BsYA-NZg.js} +1 -1
- package/dist/mods/models.d.ts +1 -1
- package/dist/mods/models.js +1 -1
- package/dist/mods/prepare.d.ts +1 -1
- package/dist/mods/prepare.js +1 -1
- package/dist/mods/synthesize.d.ts +2 -2
- package/dist/mods/tints.d.ts +2 -2
- package/dist/mods/tints.js +1 -1
- package/dist/{obj-mesh-ydhVfLKs.d.ts → obj-mesh-CzL0lOlJ.d.ts} +2 -2
- package/dist/output/encode.d.ts +1 -1
- package/dist/pack.d.ts +7 -5
- package/dist/pack.js +2 -1
- package/dist/{pipeline-DFuQa8ZT.d.ts → pipeline-DuPF3sap.d.ts} +3 -3
- package/dist/{pipeline-BTlk9-s5.js → pipeline-Q_185kY6.js} +1 -1
- package/dist/{prepare-OS7wL3jv.d.ts → prepare-BPzsZI_S.d.ts} +1 -1
- package/dist/{prepare-6pH3CNpg.d.ts → prepare-Ce5SpR7Y.d.ts} +1 -1
- package/dist/{prepare-D49Gu4Lv.js → prepare-DkJkZXuQ.js} +2 -2
- package/dist/{prepare-Myd_ec4v.js → prepare-sj36BP90.js} +4 -4
- package/dist/{rasterizer-C2wgJZ6J.d.ts → rasterizer-DjnurUgD.d.ts} +1 -1
- package/dist/render/blend.d.ts +1 -1
- package/dist/render/compose.d.ts +2 -2
- package/dist/render/entity-fallback.d.ts +6 -6
- package/dist/render/face.d.ts +1 -1
- package/dist/render/fluid-bucket.d.ts +2 -2
- package/dist/render/geo.d.ts +1 -1
- package/dist/render/legacy-tints.d.ts +2 -2
- package/dist/render/obj.d.ts +5 -5
- package/dist/render/pipeline.d.ts +1 -1
- package/dist/render/pipeline.js +1 -1
- package/dist/render/rasterizer.d.ts +1 -1
- package/dist/render/renderer.d.ts +1 -1
- package/dist/render/tints.d.ts +1 -1
- package/dist/{renderer-DbUmTFDb.d.ts → renderer-QgROYvPv.d.ts} +5 -5
- package/dist/resources/descriptor.d.ts +1 -1
- package/dist/resources/descriptor.js +1 -1
- package/dist/resources/entity-textures.d.ts +2 -2
- package/dist/resources/jar.d.ts +1 -1
- package/dist/resources/jar.js +1 -1
- package/dist/resources/manager.d.ts +1 -1
- package/dist/resources/manager.js +1 -1
- package/dist/resources/synthetic.d.ts +1 -1
- package/dist/resources/zip-reader.js +1 -1
- package/dist/{run-Ctt_1iTd.js → run-5yX5KRiI.js} +4 -4
- package/dist/{run-CLjF0N2d.d.ts → run-CxB1qabg.d.ts} +2 -2
- package/dist/run.d.ts +1 -1
- package/dist/run.js +1 -1
- package/dist/{sources-e5D09Jz_.d.ts → sources-sFtealLJ.d.ts} +1 -1
- package/dist/states-BvoZA-ql.js +40 -0
- package/dist/states-OzneeCTU.d.ts +25 -0
- package/dist/{synthetic-B3R7mW9k.d.ts → synthetic-CWtFtAkR.d.ts} +1 -1
- package/dist/textures/loader.d.ts +1 -1
- package/dist/textures/overlay.d.ts +1 -1
- package/dist/{tints-uLl1CIkC.d.ts → tints-B0a1K11c.d.ts} +2 -2
- package/dist/{tints-BspVCz2G.js → tints-CZeyKzMv.js} +2 -2
- package/dist/{tints-CQX8a1F0.d.ts → tints-DwFmEkf3.d.ts} +2 -2
- package/dist/versions/legacy-reshape.d.ts +1 -1
- package/dist/versions/prepare.d.ts +1 -1
- package/dist/versions/prepare.js +1 -1
- package/dist/workers/render-worker.d.ts +2 -2
- package/dist/workers/render-worker.js +2 -2
- package/dist/{zip-reader-BSbJKUT1.js → zip-reader-onwEVMea.js} +4 -4
- package/package.json +6 -6
- package/dist/biomes-5ZwYxMYe.js +0 -384
- package/dist/biomes-CJDJQqJb.d.ts +0 -38
- package/dist/pack-format-Baoc_aSZ.d.ts +0 -328
|
@@ -0,0 +1,632 @@
|
|
|
1
|
+
import { n as BiomeClimatePack } from "./biomes-CnnhDCnk.js";
|
|
2
|
+
import { a as BlockStateMultipartCase, o as BlockStateVariantCase } from "./blockstate-eval-BzznRcVY.js";
|
|
3
|
+
import { r as TagPack, t as AdvancementPack } from "./datapack-CmEg0Vko.js";
|
|
4
|
+
import { n as GameRulePack } from "./game-rules-ThvdDG3B.js";
|
|
5
|
+
import { a as FaceDirectionName, l as Vec3, o as ModelElementJson, u as Vec4 } from "./types-qlp3I8_-.js";
|
|
6
|
+
import { t as MeshGroup } from "./obj-mesh-CzL0lOlJ.js";
|
|
7
|
+
import { n as BlockStatesPack } from "./states-OzneeCTU.js";
|
|
8
|
+
import { n as BlockTintPack } from "./tints-DwFmEkf3.js";
|
|
9
|
+
import { t as ClassFile } from "./classfile-CsLXlh5z.js";
|
|
10
|
+
//#region src/blocks/pack-format.d.ts
|
|
11
|
+
/** How a sprite's alpha classifies it, inferred because assets rarely say. */
|
|
12
|
+
type BlockPackRenderLayer = 'solid' | 'cutout' | 'translucent';
|
|
13
|
+
interface BlockPackFace {
|
|
14
|
+
sprite: string;
|
|
15
|
+
/** [u1, v1, u2, v2] in 0–16 sprite space, derived when the model omits it. */
|
|
16
|
+
uv: Vec4;
|
|
17
|
+
rotation?: number;
|
|
18
|
+
tintindex?: number;
|
|
19
|
+
cullface?: FaceDirectionName;
|
|
20
|
+
}
|
|
21
|
+
interface BlockPackElement {
|
|
22
|
+
from: Vec3;
|
|
23
|
+
to: Vec3;
|
|
24
|
+
rotation?: ModelElementJson['rotation'];
|
|
25
|
+
shade?: false;
|
|
26
|
+
faces: Partial<Record<FaceDirectionName, BlockPackFace>>;
|
|
27
|
+
}
|
|
28
|
+
interface BlockPackModel {
|
|
29
|
+
ao: boolean;
|
|
30
|
+
elements: BlockPackElement[];
|
|
31
|
+
/**
|
|
32
|
+
* The model's `particle` texture. What the game throws when the block breaks
|
|
33
|
+
* or is walked on, and the only colour a consumer has to work with for a
|
|
34
|
+
* block that draws nothing — a placeholder cube for a chest comes out oak
|
|
35
|
+
* rather than magenta.
|
|
36
|
+
*/
|
|
37
|
+
particle?: string;
|
|
38
|
+
/** Triangle geometry from an OBJ loader, when the model uses one. */
|
|
39
|
+
mesh?: MeshGroup[];
|
|
40
|
+
/**
|
|
41
|
+
* The layer the model states it draws on. Authoritative where present, and
|
|
42
|
+
* it beats the per-sprite alpha inference — the same sprite can be solid in
|
|
43
|
+
* one model and translucent in another.
|
|
44
|
+
*/
|
|
45
|
+
renderType?: BlockPackRenderLayer;
|
|
46
|
+
/** Block offsets a split-multiblock mesh spans. */
|
|
47
|
+
multiblock?: Array<[number, number, number]>;
|
|
48
|
+
/**
|
|
49
|
+
* Present when the block is a fluid, whose real surface height and flow
|
|
50
|
+
* direction come from its neighbours and so cannot be baked. The cube here is
|
|
51
|
+
* a stand-in; these are the sheets to mesh the real thing with.
|
|
52
|
+
*/
|
|
53
|
+
fluid?: {
|
|
54
|
+
still: string;
|
|
55
|
+
flow: string;
|
|
56
|
+
overlay?: string;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
interface BlockPackSpriteFrame {
|
|
60
|
+
page: number;
|
|
61
|
+
x: number;
|
|
62
|
+
y: number;
|
|
63
|
+
/** Duration in game ticks. */
|
|
64
|
+
time: number;
|
|
65
|
+
}
|
|
66
|
+
interface BlockPackSprite {
|
|
67
|
+
page: number;
|
|
68
|
+
x: number;
|
|
69
|
+
y: number;
|
|
70
|
+
w: number;
|
|
71
|
+
h: number;
|
|
72
|
+
layer: BlockPackRenderLayer;
|
|
73
|
+
/** The displayed sequence, which can revisit a frame; absent when static. */
|
|
74
|
+
frames?: BlockPackSpriteFrame[];
|
|
75
|
+
interpolate?: true;
|
|
76
|
+
}
|
|
77
|
+
interface BlockPackAtlasPage {
|
|
78
|
+
file: string;
|
|
79
|
+
width: number;
|
|
80
|
+
height: number;
|
|
81
|
+
}
|
|
82
|
+
/** `atlas.json`. */
|
|
83
|
+
interface BlockPackAtlasFile {
|
|
84
|
+
/** Edge-extended border per sprite, in pixels. */
|
|
85
|
+
padding: number;
|
|
86
|
+
pages: BlockPackAtlasPage[];
|
|
87
|
+
sprites: Record<string, BlockPackSprite>;
|
|
88
|
+
}
|
|
89
|
+
/** `models.json`, by fully-qualified model id. */
|
|
90
|
+
type BlockPackModelsFile = Record<string, BlockPackModel>;
|
|
91
|
+
/** `blockstates.json`, by block id, with keys and predicates already parsed. */
|
|
92
|
+
type BlockPackBlockStatesFile = Record<string, BlockPackBlockState>;
|
|
93
|
+
/**
|
|
94
|
+
* A variant as the pack writes it. Every rotation is optional because the emit
|
|
95
|
+
* drops each one at its default, which is most of them.
|
|
96
|
+
*/
|
|
97
|
+
interface BlockPackVariant {
|
|
98
|
+
model: string;
|
|
99
|
+
x?: number;
|
|
100
|
+
y?: number;
|
|
101
|
+
z?: number;
|
|
102
|
+
uvlock?: true;
|
|
103
|
+
weight?: number;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* One block's cases as the pack writes them: what `evaluateBlockState` takes,
|
|
107
|
+
* flattened to the key the file uses. Pass it as
|
|
108
|
+
* `{ kind: 'variants', cases: state.variants }` and the models come back as
|
|
109
|
+
* `BlockPackVariant`, no cast in either direction.
|
|
110
|
+
*/
|
|
111
|
+
type BlockPackBlockState = {
|
|
112
|
+
variants: Array<BlockStateVariantCase<BlockPackVariant>>;
|
|
113
|
+
multipart?: undefined;
|
|
114
|
+
} | {
|
|
115
|
+
multipart: Array<BlockStateMultipartCase<BlockPackVariant>>;
|
|
116
|
+
variants?: undefined;
|
|
117
|
+
};
|
|
118
|
+
/** `tints.json`. */
|
|
119
|
+
type BlockPackTintsFile = BlockTintPack;
|
|
120
|
+
/**
|
|
121
|
+
* How much light a block emits, 0–15.
|
|
122
|
+
*
|
|
123
|
+
* A number when every state of the block emits the same. Otherwise the commonest level is `default`
|
|
124
|
+
* and each other level is a case naming only the properties that decide it: a redstone lamp is
|
|
125
|
+
* `{ default: 0, cases: [{ when: { lit: 'true' }, level: 15 }] }`. The first case whose every
|
|
126
|
+
* property matches the state applies; `blockLightLevel` in `light-eval.ts` does that lookup.
|
|
127
|
+
*/
|
|
128
|
+
type BlockPackLight = number | {
|
|
129
|
+
default: number;
|
|
130
|
+
cases: Array<{
|
|
131
|
+
when: Record<string, string>;
|
|
132
|
+
level: number;
|
|
133
|
+
}>;
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* `light.json`, by block id, holding only the blocks that emit: absent means 0. Present only when the
|
|
137
|
+
* pack has emitters and the export could read the code for them — an `--assets` run has none.
|
|
138
|
+
*/
|
|
139
|
+
type BlockPackLightFile = Record<string, BlockPackLight>;
|
|
140
|
+
/**
|
|
141
|
+
* `behaviour.json`, by block id: hardness, collision, replaceability, map colour and the rest of what
|
|
142
|
+
* the block's `Properties` builder chain states. Read from the code, like `light.json`, so absent
|
|
143
|
+
* from an `--assets` run and from 1.13, whose builder calls have no names without mappings.
|
|
144
|
+
*/
|
|
145
|
+
type BlockPackBehaviourFile = Record<string, BlockBehaviour>;
|
|
146
|
+
/**
|
|
147
|
+
* `biomes.json`, present only when the pack has biomes to describe: vanilla's
|
|
148
|
+
* whole table, or the ones a mod's datapack declares. Absent is not empty — a
|
|
149
|
+
* consumer with no file falls back to tinting at `tints.json`'s flat climate.
|
|
150
|
+
*/
|
|
151
|
+
type BlockPackBiomesFile = BiomeClimatePack;
|
|
152
|
+
/**
|
|
153
|
+
* `tags.json`: registry → tag id → values, exactly as the version's datapack states them. Unexpanded,
|
|
154
|
+
* so a value starting `#` names another tag in the same registry. Registries are keyed by their 1.21+
|
|
155
|
+
* singular folder name (`block`, `item`, `entity_type`, `worldgen/biome`) at every version.
|
|
156
|
+
*/
|
|
157
|
+
type BlockPackTagsFile = TagPack;
|
|
158
|
+
/** `advancements.json`: advancement id → its criteria names, recipe unlocks left out. */
|
|
159
|
+
type BlockPackAdvancementsFile = AdvancementPack;
|
|
160
|
+
/**
|
|
161
|
+
* `states.json`: every block's properties, values in the game's order, and its default state. Present
|
|
162
|
+
* only when the export was given the version's data generator reports.
|
|
163
|
+
*/
|
|
164
|
+
type BlockPackStatesFile = BlockStatesPack;
|
|
165
|
+
/**
|
|
166
|
+
* `game-rules.json`: every rule the version registers, by the name `level.dat` stores it under
|
|
167
|
+
* (camelCase before 26.x, snake_case from it), with its type and default. Vanilla packs only.
|
|
168
|
+
*/
|
|
169
|
+
type BlockPackGameRulesFile = GameRulePack;
|
|
170
|
+
/** One flat sprite of an item's layer stack, in the order the client draws them. */
|
|
171
|
+
interface ItemPackLayer {
|
|
172
|
+
sprite: string;
|
|
173
|
+
/**
|
|
174
|
+
* Present when the item declares a tint at this layer, which is the client's own
|
|
175
|
+
* rule: `ItemModelGenerator` passes each layer its own index as the tint index.
|
|
176
|
+
*/
|
|
177
|
+
tintindex?: number;
|
|
178
|
+
/**
|
|
179
|
+
* The colour that tint resolves to in an item's default state, `#rrggbb`.
|
|
180
|
+
*
|
|
181
|
+
* Absent where it cannot be known from assets — a dyed leather boot or a potion
|
|
182
|
+
* takes its colour from the stack's components, which no pack can carry. A
|
|
183
|
+
* consumer drawing an absent tint untinted gets the mod's own artwork, which is
|
|
184
|
+
* the same thing the icon renderer settles for.
|
|
185
|
+
*/
|
|
186
|
+
tint?: string;
|
|
187
|
+
}
|
|
188
|
+
/** One flat item: everything there is to say about how the game draws it. */
|
|
189
|
+
interface ItemPackEntry {
|
|
190
|
+
layers: ItemPackLayer[];
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* `items.json`. Self-contained rather than sharing `atlas.json`'s pages, so a
|
|
194
|
+
* consumer that only draws blocks never fetches the item sheet at all — a world
|
|
195
|
+
* viewer needs it only once it finds a dropped stack of something that is not a
|
|
196
|
+
* block.
|
|
197
|
+
*
|
|
198
|
+
* Holds *only* items whose model is a flat sprite stack. An item absent from
|
|
199
|
+
* `items` either draws from `blockstates.json` under the same id, or is in
|
|
200
|
+
* `failures.json` saying why nothing can draw it.
|
|
201
|
+
*/
|
|
202
|
+
interface BlockPackItemsFile {
|
|
203
|
+
/** Edge-extended border per sprite, in pixels. */
|
|
204
|
+
padding: number;
|
|
205
|
+
pages: BlockPackAtlasPage[];
|
|
206
|
+
sprites: Record<string, BlockPackSprite>;
|
|
207
|
+
items: Record<string, ItemPackEntry>;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* One entity type: what to call it, and what colour it is.
|
|
211
|
+
*
|
|
212
|
+
* No geometry, because no jar has any — entity models are Java code at every version. What a consumer
|
|
213
|
+
* can do with this is name the stand-in box it draws and tint it like the animal, which is the
|
|
214
|
+
* difference between a field of arbitrary colours and a readable one.
|
|
215
|
+
*/
|
|
216
|
+
interface EntityPackEntry {
|
|
217
|
+
/** English display name, from the jar's own lang file. */
|
|
218
|
+
name: string;
|
|
219
|
+
/**
|
|
220
|
+
* Mean colour of the opaque pixels of the entity's sheet, `#rrggbb`.
|
|
221
|
+
*
|
|
222
|
+
* Absent for everything that is not a mob — an item entity, a falling block, a marker, a display,
|
|
223
|
+
* a thrown projectile — because those draw from an item or a block and have no sheet of their own.
|
|
224
|
+
* None is invented for them.
|
|
225
|
+
*/
|
|
226
|
+
color?: string;
|
|
227
|
+
/**
|
|
228
|
+
* The sheet the colour came from, and what the model's `uv` values address. A sprite id in
|
|
229
|
+
* `entity-models.json`'s atlas once that file is present.
|
|
230
|
+
*/
|
|
231
|
+
texture?: string;
|
|
232
|
+
/** Key into `entity-models.json`'s `models`, when geometry was recovered for this entity. */
|
|
233
|
+
model?: string;
|
|
234
|
+
/**
|
|
235
|
+
* Hitbox in blocks, as `EntityType.Builder.sized` states it: the base size, before a baby or a big
|
|
236
|
+
* slime scales its own. Absent where no code was read (an `--assets` run, 1.13).
|
|
237
|
+
*/
|
|
238
|
+
width?: number;
|
|
239
|
+
height?: number;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* `entities.json`, by entity id. The registry read off the lang file, which is the closest thing a jar
|
|
243
|
+
* carries to it. Absent from a pack whose namespaces register no entities.
|
|
244
|
+
*/
|
|
245
|
+
type BlockPackEntitiesFile = Record<string, EntityPackEntry>;
|
|
246
|
+
/** One box of a part, in the model's own space, exactly as the game's own builder stated it. */
|
|
247
|
+
/** The six faces a box can carry its own texture rect on. */
|
|
248
|
+
type EntityPackCubeFace = 'north' | 'south' | 'east' | 'west' | 'up' | 'down';
|
|
249
|
+
interface EntityPackCube {
|
|
250
|
+
/** Minimum corner. */
|
|
251
|
+
origin: Vec3;
|
|
252
|
+
size: Vec3;
|
|
253
|
+
/** Texture offset in pixels on the entity's own sheet, as `texOffs` set it. */
|
|
254
|
+
uv: [number, number];
|
|
255
|
+
/** Grows the box on every side; `CubeDeformation`, or a builder's `delta`. */
|
|
256
|
+
inflate?: number;
|
|
257
|
+
mirror?: true;
|
|
258
|
+
/**
|
|
259
|
+
* Per-face texture rects, which replace the box unwrap `uv` implies wherever they are present.
|
|
260
|
+
*
|
|
261
|
+
* Java has no such thing, since `addBox` always unwraps the same way, but bedrock geometry does and
|
|
262
|
+
* leans on it: 56% of the cubes across four GeckoLib mods state their faces individually. A consumer
|
|
263
|
+
* that ignores this draws over half of every such mob from the wrong part of its sheet.
|
|
264
|
+
*/
|
|
265
|
+
faces?: Partial<Record<EntityPackCubeFace, {
|
|
266
|
+
uv: [number, number];
|
|
267
|
+
size: [number, number];
|
|
268
|
+
}>>;
|
|
269
|
+
}
|
|
270
|
+
/** One bone: where it pivots, what it is made of, and what hangs off it. */
|
|
271
|
+
interface EntityPackPart {
|
|
272
|
+
name: string;
|
|
273
|
+
/** Pivot relative to the parent bone. */
|
|
274
|
+
pivot: Vec3;
|
|
275
|
+
/** Radians about x, y, z, as `PartPose.offsetAndRotation` states them. */
|
|
276
|
+
rotation: Vec3;
|
|
277
|
+
cubes: EntityPackCube[];
|
|
278
|
+
children: EntityPackPart[];
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* One entity model: a bone hierarchy of boxes, recovered from the client's own code.
|
|
282
|
+
*
|
|
283
|
+
* `textureSize` is the sheet the `uv` values are in, which is *not* the atlas page — a consumer maps
|
|
284
|
+
* `uv` through it into the sprite's rect, exactly as it does for a block face.
|
|
285
|
+
*
|
|
286
|
+
* **Prefer the sprite's own `w`/`h` where the entity has one**, and keep this as the fallback. One
|
|
287
|
+
* model can be drawn on two differently sized sheets: from 1.21.4 a boat and a chest boat are both a
|
|
288
|
+
* `BoatModel`, on a 128x64 and a 128x128 sheet respectively, so no single value here is right for both.
|
|
289
|
+
*/
|
|
290
|
+
interface EntityPackModel {
|
|
291
|
+
textureSize: [number, number];
|
|
292
|
+
parts: EntityPackPart[];
|
|
293
|
+
/** Anything the extraction had to skip or assume, so a consumer can distrust it knowingly. */
|
|
294
|
+
notes?: string[];
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* `entity-models.json`. Self-contained like `items.json`, with its own atlas of entity sheets, so a
|
|
298
|
+
* consumer that never draws a mob does not fetch any of it.
|
|
299
|
+
*
|
|
300
|
+
* `models` is keyed by the class the geometry came from, and `entities.json`'s `model` points at it —
|
|
301
|
+
* several entities share one model (every zombie is a `HumanoidModel`), and keying by class is what
|
|
302
|
+
* makes that one entry rather than twenty copies.
|
|
303
|
+
*/
|
|
304
|
+
interface BlockPackEntityModelsFile {
|
|
305
|
+
padding: number;
|
|
306
|
+
pages: BlockPackAtlasPage[];
|
|
307
|
+
sprites: Record<string, BlockPackSprite>;
|
|
308
|
+
models: Record<string, EntityPackModel>;
|
|
309
|
+
/** Worn armour, when the version's classes described any. Absent otherwise. */
|
|
310
|
+
equipment?: EquipmentPack;
|
|
311
|
+
}
|
|
312
|
+
/** The armour slots the game dresses a humanoid in, in the order it layers them. */
|
|
313
|
+
declare const EQUIPMENT_SLOTS: readonly ["feet", "legs", "chest", "head"];
|
|
314
|
+
type EquipmentSlot = typeof EQUIPMENT_SLOTS[number];
|
|
315
|
+
/**
|
|
316
|
+
* Worn armour: one humanoid-shaped mesh, the two sizes it is drawn at, and a sheet per material.
|
|
317
|
+
*
|
|
318
|
+
* Armour is not geometry of its own — it is the wearer's own humanoid shape grown by a fixed amount,
|
|
319
|
+
* which is why one mesh dresses a player, a zombie and an armour stand alike. The leggings are the
|
|
320
|
+
* *inner* layer and everything else the *outer*, drawn a little larger so the two never fight.
|
|
321
|
+
*
|
|
322
|
+
* Everything a consumer needs to decide what to draw is stated here rather than derived, in keeping
|
|
323
|
+
* with the rest of the pack: which parts a slot lights up, which sheet a material uses, and which
|
|
324
|
+
* material an item is made of.
|
|
325
|
+
*/
|
|
326
|
+
interface EquipmentPack {
|
|
327
|
+
/** Key into `models`, holding the humanoid armour shape. */
|
|
328
|
+
model: string;
|
|
329
|
+
/** How much each layer grows the wearer's boxes by, in pixels. */
|
|
330
|
+
inflate: {
|
|
331
|
+
inner: number;
|
|
332
|
+
outer: number;
|
|
333
|
+
};
|
|
334
|
+
/** Parts each slot shows. A slot lights up some of the one mesh rather than owning geometry. */
|
|
335
|
+
slots: Record<EquipmentSlot, string[]>;
|
|
336
|
+
/** Which layer a slot is drawn on, which decides the sheet as well as the size. */
|
|
337
|
+
layerOf: Record<EquipmentSlot, 'inner' | 'outer'>;
|
|
338
|
+
/** Sprite ids per material and layer, into this file's own `sprites`. */
|
|
339
|
+
materials: Record<string, Partial<Record<'inner' | 'outer', string>>>;
|
|
340
|
+
/**
|
|
341
|
+
* The armour items themselves. Keyed by item id because that is what a world writes into an
|
|
342
|
+
* entity's `equipment` compound, and nothing in the assets maps one to the other.
|
|
343
|
+
*/
|
|
344
|
+
items: Record<string, {
|
|
345
|
+
material: string;
|
|
346
|
+
slot: EquipmentSlot;
|
|
347
|
+
}>;
|
|
348
|
+
/** Materials whose sheet is greyscale and takes the item's own dye colour. */
|
|
349
|
+
dyeable: string[];
|
|
350
|
+
/** Worn armour-trim sheets generated from the version's armour-trim atlas. */
|
|
351
|
+
trims: {
|
|
352
|
+
/** Sprite ids per pattern and material, into this file's own `sprites`. */
|
|
353
|
+
patterns: Record<string, Record<string, Partial<Record<'inner' | 'outer', string>>>>;
|
|
354
|
+
/** Material a trim falls back to when it matches the armour it is on. */
|
|
355
|
+
darker: Record<string, string>;
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
/** `meta.json`, written last because it hashes every other file. */
|
|
359
|
+
interface BlockPackMetaFile {
|
|
360
|
+
generator: string;
|
|
361
|
+
version: string;
|
|
362
|
+
namespaces: string[];
|
|
363
|
+
counts: {
|
|
364
|
+
blocks: number;
|
|
365
|
+
models: number;
|
|
366
|
+
sprites: number;
|
|
367
|
+
pages: number;
|
|
368
|
+
/** Biomes in `biomes.json`; `0` means the pack has none and the file is absent. */
|
|
369
|
+
biomes: number;
|
|
370
|
+
/** Flat items in `items.json`; `0` means the pack has none and the file is absent. */
|
|
371
|
+
items: number;
|
|
372
|
+
/** Entity types in `entities.json`; `0` means the pack has none and the file is absent. */
|
|
373
|
+
entities: number;
|
|
374
|
+
/** Distinct entity models in `entity-models.json`; `0` means the file is absent. */
|
|
375
|
+
entityModels: number;
|
|
376
|
+
/** Emitting blocks in `light.json`; `0` means the file is absent. */
|
|
377
|
+
light: number;
|
|
378
|
+
/** Blocks in `behaviour.json`; `0` means the file is absent. */
|
|
379
|
+
behaviour: number;
|
|
380
|
+
/** Tags across every registry in `tags.json`; `0` means the file is absent. */
|
|
381
|
+
tags: number;
|
|
382
|
+
/** Advancements in `advancements.json`; `0` means the file is absent. */
|
|
383
|
+
advancements: number;
|
|
384
|
+
/** Blocks in `states.json`; `0` means the file is absent. */
|
|
385
|
+
states: number;
|
|
386
|
+
/** Rules in `game-rules.json`; `0` means the file is absent. */
|
|
387
|
+
gameRules: number;
|
|
388
|
+
failures: number;
|
|
389
|
+
};
|
|
390
|
+
/** sha256 per file, enough to verify a cached copy without refetching it. */
|
|
391
|
+
hashes: Record<string, string>;
|
|
392
|
+
}
|
|
393
|
+
//#endregion
|
|
394
|
+
//#region src/blocks/light-bytecode.d.ts
|
|
395
|
+
/** A member reference as the constant pool spells it. */
|
|
396
|
+
interface MemberReference {
|
|
397
|
+
owner: string;
|
|
398
|
+
name: string;
|
|
399
|
+
descriptor: string;
|
|
400
|
+
}
|
|
401
|
+
/** What the caller supplies: how to find code, and how to rename a reference before looking. */
|
|
402
|
+
interface LightCodeSource {
|
|
403
|
+
/** The parsed class, or null for anything outside the jars (the JDK, a loader). */
|
|
404
|
+
resolve: (internalName: string) => ClassFile | null;
|
|
405
|
+
/**
|
|
406
|
+
* A reference as the jar spells it. A mod names the game's classes and members by their original
|
|
407
|
+
* names; against an obfuscated client those have to be renamed before they can be found.
|
|
408
|
+
*/
|
|
409
|
+
remap: (reference: MemberReference, field: boolean) => MemberReference;
|
|
410
|
+
remapClass: (internalName: string) => string;
|
|
411
|
+
/**
|
|
412
|
+
* A member's original name, for reading the game's own obfuscated calls: `eea$d.a(FF)` is `strength`.
|
|
413
|
+
* Absent, or answering the name it was given, where the jar already speaks original names.
|
|
414
|
+
*/
|
|
415
|
+
nameOf?: (reference: MemberReference, field: boolean) => string;
|
|
416
|
+
/** Classes that are a block `Properties` builder, in every spelling the jars use. */
|
|
417
|
+
propsClasses: ReadonlySet<string>;
|
|
418
|
+
/**
|
|
419
|
+
* Whether a class is the game's rather than a mod's. A mod export runs the game's own `Blocks` too,
|
|
420
|
+
* for the properties mods copy, and its registrations must not answer for a mod block that happens
|
|
421
|
+
* to share a name — `immersiveengineering:lantern` is not `minecraft:lantern`.
|
|
422
|
+
*/
|
|
423
|
+
isVanillaClass: (internalName: string) => boolean;
|
|
424
|
+
/**
|
|
425
|
+
* Methods a block class may override to answer its own light: the game's `getLightValue(state)`
|
|
426
|
+
* before 1.16, when a lit furnace was an override rather than a lambda, and a loader's
|
|
427
|
+
* `getLightEmission(state, level, pos)`. `root` is the class whose implementation is the plain
|
|
428
|
+
* property read, so a call resolving there — `super.getLightValue(state)` — is answered from the
|
|
429
|
+
* block's `Properties`.
|
|
430
|
+
*/
|
|
431
|
+
lightGetters: ReadonlyArray<LightGetter>;
|
|
432
|
+
}
|
|
433
|
+
interface LightGetter {
|
|
434
|
+
name: string;
|
|
435
|
+
/** Empty to match by name alone: a loader method whose parameter types the jar does not spell. */
|
|
436
|
+
descriptor: string;
|
|
437
|
+
root: string | null;
|
|
438
|
+
}
|
|
439
|
+
/** How a block's light is stated, before it is evaluated. */
|
|
440
|
+
type LightSpec = {
|
|
441
|
+
kind: 'constant';
|
|
442
|
+
level: number;
|
|
443
|
+
} |
|
|
444
|
+
/** A `ToIntFunction<BlockState>`, to be run per state. */
|
|
445
|
+
{
|
|
446
|
+
kind: 'function';
|
|
447
|
+
fn: LambdaValue;
|
|
448
|
+
} |
|
|
449
|
+
/** A block class's own light method: a 1.13–1.15 `getLightValue` override, or a loader's `getLightEmission`. */
|
|
450
|
+
{
|
|
451
|
+
kind: 'method';
|
|
452
|
+
owner: string;
|
|
453
|
+
getter: LightGetter;
|
|
454
|
+
receiver: Handle | null;
|
|
455
|
+
} |
|
|
456
|
+
/** A light function the interpreter could not identify — one built from a value it never saw. */
|
|
457
|
+
{
|
|
458
|
+
kind: 'opaque';
|
|
459
|
+
reason: string;
|
|
460
|
+
};
|
|
461
|
+
interface PropsCall {
|
|
462
|
+
name: string;
|
|
463
|
+
descriptor: string;
|
|
464
|
+
args: Value[];
|
|
465
|
+
}
|
|
466
|
+
interface Handle {
|
|
467
|
+
id: number;
|
|
468
|
+
/** Internal class name, from `new` or the declared return type of the opaque call that made it. */
|
|
469
|
+
type: string | null;
|
|
470
|
+
/** Strings that flowed into this object: the name a registration key or a property was made from. */
|
|
471
|
+
strings: string[];
|
|
472
|
+
numbers: number[];
|
|
473
|
+
/** Class literals that flowed in: the value class of an enum property. */
|
|
474
|
+
classes: string[];
|
|
475
|
+
fields: Map<string, Value>;
|
|
476
|
+
isProps: boolean;
|
|
477
|
+
light: LightSpec | null;
|
|
478
|
+
/** For a `Properties`: every builder call made on it, by its mapped name, for `block-behaviour.ts` to read. */
|
|
479
|
+
calls?: PropsCall[];
|
|
480
|
+
/** For a `Properties` made by copying a block's: the properties it copied, whose calls come first. */
|
|
481
|
+
copyOf?: Handle | null;
|
|
482
|
+
/** For a block: the `Properties` it was constructed with. */
|
|
483
|
+
props: Handle | null;
|
|
484
|
+
ctorArgs: Value[] | null;
|
|
485
|
+
/** `StringBuilder` parts, for the pre-Java 9 way of building a name. */
|
|
486
|
+
builder?: Array<string | number>;
|
|
487
|
+
origin?: string;
|
|
488
|
+
/** Entries of a map the code filled, for a lookup table of properties by direction. */
|
|
489
|
+
map?: Array<{
|
|
490
|
+
key: Value;
|
|
491
|
+
value: Value;
|
|
492
|
+
}>;
|
|
493
|
+
/** Elements of a list or set the code filled, for a table of names a mod registers in a loop. */
|
|
494
|
+
items?: Value[];
|
|
495
|
+
/** An iterator over a list: what it walks and where it is. */
|
|
496
|
+
iterator?: {
|
|
497
|
+
items: Value[];
|
|
498
|
+
at: number;
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
interface LambdaValue {
|
|
502
|
+
kind: 'lambda';
|
|
503
|
+
owner: string;
|
|
504
|
+
name: string;
|
|
505
|
+
descriptor: string;
|
|
506
|
+
captured: Value[];
|
|
507
|
+
}
|
|
508
|
+
/** A `BlockState` during evaluation of a light function: a bag of property values being read. */
|
|
509
|
+
interface StateProbe {
|
|
510
|
+
values: Map<string, string>;
|
|
511
|
+
domains: Map<string, PropertyDomain>;
|
|
512
|
+
reads: Set<string>;
|
|
513
|
+
failure: string | null;
|
|
514
|
+
}
|
|
515
|
+
interface PropertyDomain {
|
|
516
|
+
name: string;
|
|
517
|
+
values: string[];
|
|
518
|
+
/** The enum constant per serialized value, for a property whose values are an enum. */
|
|
519
|
+
constants?: Map<string, Handle>;
|
|
520
|
+
}
|
|
521
|
+
type Value = LambdaValue | {
|
|
522
|
+
kind: 'number';
|
|
523
|
+
value: number;
|
|
524
|
+
wide?: boolean;
|
|
525
|
+
} | {
|
|
526
|
+
kind: 'string';
|
|
527
|
+
value: string;
|
|
528
|
+
} | {
|
|
529
|
+
kind: 'object';
|
|
530
|
+
handle: Handle;
|
|
531
|
+
} | {
|
|
532
|
+
kind: 'array';
|
|
533
|
+
items: Value[];
|
|
534
|
+
} | {
|
|
535
|
+
kind: 'class';
|
|
536
|
+
name: string;
|
|
537
|
+
} | {
|
|
538
|
+
kind: 'null';
|
|
539
|
+
} | {
|
|
540
|
+
kind: 'state';
|
|
541
|
+
probe: StateProbe;
|
|
542
|
+
} | {
|
|
543
|
+
kind: 'unknown';
|
|
544
|
+
};
|
|
545
|
+
/** One registration this found: which `Properties` a name was registered with, and the block if seen. */
|
|
546
|
+
interface Registration {
|
|
547
|
+
props: Handle | null;
|
|
548
|
+
block: Handle | null;
|
|
549
|
+
/** The block's class, when a factory method reference named it. */
|
|
550
|
+
blockType: string | null;
|
|
551
|
+
/** The call that registered it, for a person chasing a wrong answer. */
|
|
552
|
+
site: string;
|
|
553
|
+
/** Made by the game's own code, which a mod's block of the same bare name must not inherit. */
|
|
554
|
+
vanilla: boolean;
|
|
555
|
+
}
|
|
556
|
+
/** What one run over a set of registry classes found. */
|
|
557
|
+
interface LightExtraction {
|
|
558
|
+
registrations: Map<string, Registration>;
|
|
559
|
+
notes: string[];
|
|
560
|
+
/** The light a block emits, or why it could not be worked out. */
|
|
561
|
+
lightOf: (blockId: string) => {
|
|
562
|
+
light: BlockPackLight;
|
|
563
|
+
} | {
|
|
564
|
+
failure: string;
|
|
565
|
+
};
|
|
566
|
+
/** The registration the code made for a block, under its full id or its own side's bare path. */
|
|
567
|
+
registrationOf: (blockId: string) => Registration | null;
|
|
568
|
+
/**
|
|
569
|
+
* Runs a function of a block state once per combination of the properties it reads, folded like
|
|
570
|
+
* light: a number when every state agrees, a default and cases otherwise. `read` turns what the
|
|
571
|
+
* function returned into a number, or null when it is not one this can use.
|
|
572
|
+
*/
|
|
573
|
+
tabulate: (fn: LambdaValue, read: (value: Value) => number | null) => {
|
|
574
|
+
value: BlockPackLight;
|
|
575
|
+
} | {
|
|
576
|
+
failure: string;
|
|
577
|
+
};
|
|
578
|
+
/** What was recorded for a block, for a person chasing a failure. */
|
|
579
|
+
describe: (blockId: string) => string;
|
|
580
|
+
}
|
|
581
|
+
/**
|
|
582
|
+
* Runs the registry code of a set of classes and answers, per block, what it emits.
|
|
583
|
+
*
|
|
584
|
+
* `roots` are the classes whose methods register blocks; every method of each is run, because where
|
|
585
|
+
* the registrations sit differs by era and mod — `<clinit>` for a modern registry, a static
|
|
586
|
+
* `registerBlocks()` in 1.13, an instance `init()` in a mod. The order is `<clinit>` first, since the
|
|
587
|
+
* others read what it set up.
|
|
588
|
+
*/
|
|
589
|
+
declare function extractBlockLight(roots: readonly ClassFile[], source: LightCodeSource): LightExtraction;
|
|
590
|
+
//#endregion
|
|
591
|
+
//#region src/blocks/block-behaviour.d.ts
|
|
592
|
+
/** How pistons treat a block; absent means `normal`, pushed and pulled like stone. */
|
|
593
|
+
type PushReactionName = 'destroy' | 'block' | 'ignore' | 'push_only';
|
|
594
|
+
interface BlockBehaviour {
|
|
595
|
+
/** Seconds-ish to mine by hand, as `destroyTime`; `-1` is unbreakable. */
|
|
596
|
+
hardness: number;
|
|
597
|
+
/** Explosion resistance. */
|
|
598
|
+
resistance: number;
|
|
599
|
+
/**
|
|
600
|
+
* Map colour id (0–63, 0 draws nothing). A number, or per-state cases in the shape `light.json`
|
|
601
|
+
* uses: a log is one colour on its end grain and another on its bark.
|
|
602
|
+
*/
|
|
603
|
+
mapColor?: BlockPackLight;
|
|
604
|
+
/** Entities walk through it: grass, flowers, torches. */
|
|
605
|
+
collision?: false;
|
|
606
|
+
/** It hides nothing behind it: glass, leaves, anything `noOcclusion()`. */
|
|
607
|
+
occludes?: false;
|
|
608
|
+
/** A placed block or a growing tree takes its place without breaking it. */
|
|
609
|
+
replaceable?: true;
|
|
610
|
+
air?: true;
|
|
611
|
+
liquid?: true;
|
|
612
|
+
/** Lava sets it alight (`ignitedByLava`, or a flammable `Material` before 1.20). */
|
|
613
|
+
flammable?: true;
|
|
614
|
+
pushReaction?: PushReactionName;
|
|
615
|
+
/** Drops nothing unless mined with the right tool. */
|
|
616
|
+
requiresTool?: true;
|
|
617
|
+
randomTicks?: true;
|
|
618
|
+
friction?: number;
|
|
619
|
+
speedFactor?: number;
|
|
620
|
+
jumpFactor?: number;
|
|
621
|
+
}
|
|
622
|
+
/**
|
|
623
|
+
* The colour a block's `Properties` state: a `mapColor` call, the colour a pre-1.20 `Properties` was
|
|
624
|
+
* constructed with, or its `Material`'s, latest first. A constant or a function of state.
|
|
625
|
+
*/
|
|
626
|
+
declare function statedMapColor(props: Handle): Value | undefined;
|
|
627
|
+
declare function blockBehaviour(registration: Registration, extraction: Pick<LightExtraction, 'tabulate'>): {
|
|
628
|
+
behaviour: BlockBehaviour;
|
|
629
|
+
failures: string[];
|
|
630
|
+
} | null;
|
|
631
|
+
//#endregion
|
|
632
|
+
export { BlockPackItemsFile as A, BlockPackTagsFile as B, BlockPackBlockState as C, BlockPackEntityModelsFile as D, BlockPackEntitiesFile as E, BlockPackModelsFile as F, EntityPackCubeFace as G, BlockPackVariant as H, BlockPackRenderLayer as I, EntityPackPart as J, EntityPackEntry as K, BlockPackSprite as L, BlockPackLightFile as M, BlockPackMetaFile as N, BlockPackFace as O, BlockPackModel as P, ItemPackLayer as Q, BlockPackSpriteFrame as R, BlockPackBiomesFile as S, BlockPackElement as T, EQUIPMENT_SLOTS as U, BlockPackTintsFile as V, EntityPackCube as W, EquipmentSlot as X, EquipmentPack as Y, ItemPackEntry as Z, extractBlockLight as _, Handle as a, BlockPackAtlasPage as b, LightExtraction as c, MemberReference as d, PropertyDomain as f, Value as g, StateProbe as h, statedMapColor as i, BlockPackLight as j, BlockPackGameRulesFile as k, LightGetter as l, Registration as m, PushReactionName as n, LambdaValue as o, PropsCall as p, EntityPackModel as q, blockBehaviour as r, LightCodeSource as s, BlockBehaviour as t, LightSpec as u, BlockPackAdvancementsFile as v, BlockPackBlockStatesFile as w, BlockPackBehaviourFile as x, BlockPackAtlasFile as y, BlockPackStatesFile as z };
|