@@ -3,6 +3,7 @@ import fs from 'fs'
33import * as nbt from 'prismarine-nbt'
44import RegionFile from 'prismarine-provider-anvil/src/region'
55import { versions } from 'minecraft-data'
6+ import { getThreeJsRendererMethods } from 'renderer/viewer/three/threeJsMethods'
67import { openWorldDirectory , openWorldZip } from './browserfs'
78import { isGameActive } from './globalState'
89import { showNotification } from './react/NotificationProvider'
@@ -12,6 +13,9 @@ const parseNbt = promisify(nbt.parse)
1213const simplifyNbt = nbt . simplify
1314window . nbt = nbt
1415
16+ // Supported image types for skybox
17+ const VALID_IMAGE_EXTENSIONS = [ '.png' , '.jpg' , '.jpeg' , '.webp' ]
18+
1519// todo display drop zone
1620for ( const event of [ 'drag' , 'dragstart' , 'dragend' , 'dragover' , 'dragenter' , 'dragleave' , 'drop' ] ) {
1721 window . addEventListener ( event , ( e : any ) => {
@@ -45,6 +49,34 @@ window.addEventListener('drop', async e => {
4549} )
4650
4751async function handleDroppedFile ( file : File ) {
52+ // Check for image files first when game is active
53+ if ( isGameActive ( false ) && VALID_IMAGE_EXTENSIONS . some ( ext => file . name . toLowerCase ( ) . endsWith ( ext ) ) ) {
54+ try {
55+ // Convert image to base64
56+ const reader = new FileReader ( )
57+ const base64Promise = new Promise < string > ( ( resolve , reject ) => {
58+ reader . onload = ( ) => resolve ( reader . result as string )
59+ reader . onerror = reject
60+ } )
61+ reader . readAsDataURL ( file )
62+ const base64Image = await base64Promise
63+
64+ // Get ThreeJS backend methods and update skybox
65+ const setSkyboxImage = getThreeJsRendererMethods ( ) ?. setSkyboxImage
66+ if ( setSkyboxImage ) {
67+ await setSkyboxImage ( base64Image )
68+ showNotification ( 'Skybox updated successfully' )
69+ } else {
70+ showNotification ( 'Cannot update skybox - renderer does not support it' )
71+ }
72+ return
73+ } catch ( err ) {
74+ console . error ( 'Failed to update skybox:' , err )
75+ showNotification ( 'Failed to update skybox' , 'error' )
76+ return
77+ }
78+ }
79+
4880 if ( file . name . endsWith ( '.zip' ) ) {
4981 void openWorldZip ( file )
5082 return
0 commit comments