@@ -2,7 +2,7 @@ import { DataModel } from '@mcschema/core'
2
2
import { useMemo , useRef , useState } from 'preact/hooks'
3
3
import { useLocale , useVersion } from '../../contexts/index.js'
4
4
import { useAsync } from '../../hooks/useAsync.js'
5
- import { checkVersion , fetchItemComponents } from '../../services/index.js'
5
+ import { checkVersion , fetchAllPresets , fetchItemComponents } from '../../services/index.js'
6
6
import { clamp , jsonToNbt , randomSeed } from '../../Utils.js'
7
7
import { Btn , BtnMenu , NumberInput } from '../index.js'
8
8
import { ItemDisplay } from '../ItemDisplay.jsx'
@@ -14,7 +14,7 @@ import { generateLootTable as generateLootTable1204 } from './LootTable1204.js'
14
14
export const LootTablePreview = ( { data } : PreviewProps ) => {
15
15
const { locale } = useLocale ( )
16
16
const { version } = useVersion ( )
17
- const use1204 = checkVersion ( version , undefined , '1.20.4 ' )
17
+ const use1204 = ! checkVersion ( version , '1.20.5 ' )
18
18
19
19
const [ seed , setSeed ] = useState ( randomSeed ( ) )
20
20
const [ luck , setLuck ] = useState ( 0 )
@@ -24,22 +24,39 @@ export const LootTablePreview = ({ data }: PreviewProps) => {
24
24
const [ advancedTooltips , setAdvancedTooltips ] = useState ( true )
25
25
const overlay = useRef < HTMLDivElement > ( null )
26
26
27
- const { value : itemComponents } = useAsync ( ( ) => {
28
- return use1204 ? Promise . resolve ( undefined ) : fetchItemComponents ( version )
29
- } , [ use1204 , version ] )
27
+ const { value : dependencies , loading } = useAsync ( ( ) => {
28
+ return Promise . all ( [
29
+ fetchAllPresets ( version , 'tag/item' ) ,
30
+ fetchAllPresets ( version , 'loot_table' ) ,
31
+ use1204 ? Promise . resolve ( undefined ) : fetchItemComponents ( version ) ,
32
+ ] )
33
+ } , [ version ] )
30
34
31
35
const table = DataModel . unwrapLists ( data )
32
36
const state = JSON . stringify ( table )
33
37
const items = useMemo ( ( ) => {
38
+ if ( dependencies === undefined || loading ) {
39
+ return [ ]
40
+ }
41
+ const [ itemTags , lootTables , itemComponents ] = dependencies
34
42
if ( use1204 ) {
35
- return generateLootTable1204 ( table , { version, seed, luck, daytime, weather, stackMixer : mixItems ? 'container' : 'default' } )
36
- } else {
37
- if ( itemComponents === undefined ) {
38
- return [ ]
39
- }
40
- return generateLootTable ( table , { version, seed, luck, daytime, weather, stackMixer : mixItems ? 'container' : 'default' , getBaseComponents : ( id ) => new Map ( [ ...( itemComponents . get ( id ) ?? new Map ( ) ) . entries ( ) ] . map ( ( [ k , v ] ) => [ k , jsonToNbt ( v ) ] ) ) } )
43
+ return generateLootTable1204 ( table , {
44
+ version, seed, luck, daytime, weather,
45
+ stackMixer : mixItems ? 'container' : 'default' ,
46
+ getItemTag : ( id ) => ( itemTags . get ( id . replace ( / ^ m i n e c r a f t : / , '' ) ) as any ) ?. values ?? [ ] ,
47
+ getLootTable : ( id ) => lootTables . get ( id . replace ( / ^ m i n e c r a f t : / , '' ) ) ,
48
+ getPredicate : ( ) => undefined ,
49
+ } )
41
50
}
42
- } , [ version , seed , luck , daytime , weather , mixItems , state , itemComponents ] )
51
+ return generateLootTable ( table , {
52
+ version, seed, luck, daytime, weather,
53
+ stackMixer : mixItems ? 'container' : 'default' ,
54
+ getItemTag : ( id ) => ( itemTags . get ( id . replace ( / ^ m i n e c r a f t : / , '' ) ) as any ) ?. values ?? [ ] ,
55
+ getLootTable : ( id ) => lootTables . get ( id . replace ( / ^ m i n e c r a f t : / , '' ) ) ,
56
+ getPredicate : ( ) => undefined ,
57
+ getBaseComponents : ( id ) => new Map ( [ ...( itemComponents ?. get ( id ) ?? new Map ( ) ) . entries ( ) ] . map ( ( [ k , v ] ) => [ k , jsonToNbt ( v ) ] ) ) ,
58
+ } )
59
+ } , [ version , seed , luck , daytime , weather , mixItems , state , dependencies , loading ] )
43
60
44
61
return < >
45
62
< div ref = { overlay } class = "preview-overlay" >
0 commit comments