minecraft-renderer 0.1.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 +297 -0
- package/dist/index.html +83 -0
- package/dist/static/image/arrow.6f27b59f.png +0 -0
- package/dist/static/image/blocksAtlasLatest.7850afa3.png +0 -0
- package/dist/static/image/blocksAtlasLegacy.5c76823d.png +0 -0
- package/dist/static/image/itemsAtlasLatest.36036f95.png +0 -0
- package/dist/static/image/itemsAtlasLegacy.dcb1b58d.png +0 -0
- package/dist/static/image/tipped_arrow.6f27b59f.png +0 -0
- package/dist/static/js/365.f05233ab.js +8462 -0
- package/dist/static/js/365.f05233ab.js.LICENSE.txt +52 -0
- package/dist/static/js/async/738.efa27644.js +1 -0
- package/dist/static/js/index.092ec5be.js +56 -0
- package/dist/static/js/lib-polyfill.98986ac5.js +1 -0
- package/dist/static/js/lib-react.5c9129e0.js +2 -0
- package/dist/static/js/lib-react.5c9129e0.js.LICENSE.txt +39 -0
- package/package.json +104 -0
- package/src/assets/destroy_stage_0.png +0 -0
- package/src/assets/destroy_stage_1.png +0 -0
- package/src/assets/destroy_stage_2.png +0 -0
- package/src/assets/destroy_stage_3.png +0 -0
- package/src/assets/destroy_stage_4.png +0 -0
- package/src/assets/destroy_stage_5.png +0 -0
- package/src/assets/destroy_stage_6.png +0 -0
- package/src/assets/destroy_stage_7.png +0 -0
- package/src/assets/destroy_stage_8.png +0 -0
- package/src/assets/destroy_stage_9.png +0 -0
- package/src/examples/README.md +146 -0
- package/src/examples/appViewerExample.ts +205 -0
- package/src/examples/initialMenuStart.ts +161 -0
- package/src/graphicsBackend/appViewer.ts +297 -0
- package/src/graphicsBackend/config.ts +119 -0
- package/src/graphicsBackend/index.ts +10 -0
- package/src/graphicsBackend/playerState.ts +61 -0
- package/src/graphicsBackend/types.ts +143 -0
- package/src/index.ts +97 -0
- package/src/lib/DebugGui.ts +190 -0
- package/src/lib/animationController.ts +85 -0
- package/src/lib/buildSharedConfig.mjs +1 -0
- package/src/lib/cameraBobbing.ts +94 -0
- package/src/lib/canvas2DOverlay.example.ts +361 -0
- package/src/lib/canvas2DOverlay.quickstart.ts +242 -0
- package/src/lib/canvas2DOverlay.ts +381 -0
- package/src/lib/cleanupDecorator.ts +29 -0
- package/src/lib/createPlayerObject.ts +55 -0
- package/src/lib/frameTimingCollector.ts +164 -0
- package/src/lib/guiRenderer.ts +283 -0
- package/src/lib/items.ts +140 -0
- package/src/lib/mesherlogReader.ts +131 -0
- package/src/lib/moreBlockDataGenerated.json +714 -0
- package/src/lib/preflatMap.json +1741 -0
- package/src/lib/simpleUtils.ts +40 -0
- package/src/lib/smoothSwitcher.ts +168 -0
- package/src/lib/spiral.ts +29 -0
- package/src/lib/ui/newStats.ts +120 -0
- package/src/lib/utils/proxy.ts +23 -0
- package/src/lib/utils/skins.ts +63 -0
- package/src/lib/utils.ts +76 -0
- package/src/lib/workerProxy.ts +342 -0
- package/src/lib/worldrendererCommon.ts +1088 -0
- package/src/mesher/mesher.ts +253 -0
- package/src/mesher/models.ts +769 -0
- package/src/mesher/modelsGeometryCommon.ts +142 -0
- package/src/mesher/shared.ts +80 -0
- package/src/mesher/standaloneRenderer.ts +270 -0
- package/src/mesher/test/a.ts +3 -0
- package/src/mesher/test/mesherTester.ts +76 -0
- package/src/mesher/test/playground.ts +19 -0
- package/src/mesher/test/test-perf.ts +74 -0
- package/src/mesher/test/tests.test.ts +56 -0
- package/src/mesher/world.ts +294 -0
- package/src/mesher/worldConstants.ts +1 -0
- package/src/modules/index.ts +11 -0
- package/src/modules/starfield.ts +313 -0
- package/src/modules/types.ts +110 -0
- package/src/playerState/playerState.ts +78 -0
- package/src/playerState/types.ts +36 -0
- package/src/playground/allEntitiesDebug.ts +170 -0
- package/src/playground/baseScene.ts +587 -0
- package/src/playground/mobileControls.tsx +268 -0
- package/src/playground/playground.html +83 -0
- package/src/playground/playground.ts +11 -0
- package/src/playground/playgroundUi.tsx +140 -0
- package/src/playground/reactUtils.ts +71 -0
- package/src/playground/scenes/allEntities.ts +13 -0
- package/src/playground/scenes/entities.ts +37 -0
- package/src/playground/scenes/floorRandom.ts +33 -0
- package/src/playground/scenes/frequentUpdates.ts +148 -0
- package/src/playground/scenes/geometryExport.ts +142 -0
- package/src/playground/scenes/index.ts +12 -0
- package/src/playground/scenes/lightingStarfield.ts +40 -0
- package/src/playground/scenes/main.ts +313 -0
- package/src/playground/scenes/railsCobweb.ts +14 -0
- package/src/playground/scenes/rotationIssue.ts +7 -0
- package/src/playground/scenes/slabsOptimization.ts +16 -0
- package/src/playground/scenes/transparencyIssue.ts +11 -0
- package/src/playground/shared.ts +79 -0
- package/src/resourcesManager/index.ts +5 -0
- package/src/resourcesManager/resourcesManager.ts +314 -0
- package/src/shims/minecraftData.ts +41 -0
- package/src/sign-renderer/index.html +21 -0
- package/src/sign-renderer/index.ts +216 -0
- package/src/sign-renderer/noop.js +1 -0
- package/src/sign-renderer/playground.ts +38 -0
- package/src/sign-renderer/tests.test.ts +69 -0
- package/src/sign-renderer/vite.config.ts +10 -0
- package/src/three/appShared.ts +75 -0
- package/src/three/bannerRenderer.ts +275 -0
- package/src/three/cameraShake.ts +120 -0
- package/src/three/cinimaticScript.ts +350 -0
- package/src/three/documentRenderer.ts +491 -0
- package/src/three/entities.ts +1580 -0
- package/src/three/entity/EntityMesh.ts +707 -0
- package/src/three/entity/animations.js +171 -0
- package/src/three/entity/armorModels.json +204 -0
- package/src/three/entity/armorModels.ts +36 -0
- package/src/three/entity/entities.json +6230 -0
- package/src/three/entity/exportedModels.js +38 -0
- package/src/three/entity/externalTextures.json +1 -0
- package/src/three/entity/models/allay.obj +325 -0
- package/src/three/entity/models/arrow.obj +60 -0
- package/src/three/entity/models/axolotl.obj +509 -0
- package/src/three/entity/models/blaze.obj +601 -0
- package/src/three/entity/models/boat.obj +417 -0
- package/src/three/entity/models/camel.obj +1061 -0
- package/src/three/entity/models/cat.obj +509 -0
- package/src/three/entity/models/chicken.obj +371 -0
- package/src/three/entity/models/cod.obj +371 -0
- package/src/three/entity/models/creeper.obj +279 -0
- package/src/three/entity/models/dolphin.obj +371 -0
- package/src/three/entity/models/ender_dragon.obj +2993 -0
- package/src/three/entity/models/enderman.obj +325 -0
- package/src/three/entity/models/endermite.obj +187 -0
- package/src/three/entity/models/fox.obj +463 -0
- package/src/three/entity/models/frog.obj +739 -0
- package/src/three/entity/models/ghast.obj +463 -0
- package/src/three/entity/models/goat.obj +601 -0
- package/src/three/entity/models/guardian.obj +1015 -0
- package/src/three/entity/models/horse.obj +1061 -0
- package/src/three/entity/models/llama.obj +509 -0
- package/src/three/entity/models/minecart.obj +233 -0
- package/src/three/entity/models/parrot.obj +509 -0
- package/src/three/entity/models/piglin.obj +739 -0
- package/src/three/entity/models/pillager.obj +371 -0
- package/src/three/entity/models/rabbit.obj +555 -0
- package/src/three/entity/models/sheep.obj +555 -0
- package/src/three/entity/models/shulker.obj +141 -0
- package/src/three/entity/models/sniffer.obj +693 -0
- package/src/three/entity/models/spider.obj +509 -0
- package/src/three/entity/models/tadpole.obj +95 -0
- package/src/three/entity/models/turtle.obj +371 -0
- package/src/three/entity/models/vex.obj +325 -0
- package/src/three/entity/models/villager.obj +509 -0
- package/src/three/entity/models/warden.obj +463 -0
- package/src/three/entity/models/witch.obj +647 -0
- package/src/three/entity/models/wolf.obj +509 -0
- package/src/three/entity/models/zombie_villager.obj +463 -0
- package/src/three/entity/objModels.js +1 -0
- package/src/three/fireworks.ts +661 -0
- package/src/three/fireworksRenderer.ts +434 -0
- package/src/three/globals.d.ts +7 -0
- package/src/three/graphicsBackend.ts +274 -0
- package/src/three/graphicsBackendOffThread.ts +107 -0
- package/src/three/hand.ts +89 -0
- package/src/three/holdingBlock.ts +926 -0
- package/src/three/index.ts +20 -0
- package/src/three/itemMesh.ts +427 -0
- package/src/three/modules.d.ts +14 -0
- package/src/three/panorama.ts +308 -0
- package/src/three/panoramaShared.ts +1 -0
- package/src/three/renderSlot.ts +82 -0
- package/src/three/skyboxRenderer.ts +406 -0
- package/src/three/starField.ts +13 -0
- package/src/three/threeJsMedia.ts +731 -0
- package/src/three/threeJsMethods.ts +15 -0
- package/src/three/threeJsParticles.ts +160 -0
- package/src/three/threeJsSound.ts +95 -0
- package/src/three/threeJsUtils.ts +90 -0
- package/src/three/waypointSprite.ts +435 -0
- package/src/three/waypoints.ts +163 -0
- package/src/three/world/cursorBlock.ts +172 -0
- package/src/three/world/vr.ts +257 -0
- package/src/three/worldGeometryExport.ts +259 -0
- package/src/three/worldGeometryHandler.ts +279 -0
- package/src/three/worldRendererThree.ts +1381 -0
- package/src/worldView/index.ts +6 -0
- package/src/worldView/types.ts +66 -0
- package/src/worldView/worldView.ts +424 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renderer Module System Types
|
|
3
|
+
*
|
|
4
|
+
* Modules are self-contained renderer extensions that can be enabled/disabled
|
|
5
|
+
* and configured through a standardized interface.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as THREE from 'three'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Setting value types supported by modules.
|
|
12
|
+
*/
|
|
13
|
+
export type SettingValue = boolean | number | string | number[]
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Setting definition for a module.
|
|
17
|
+
*/
|
|
18
|
+
export interface ModuleSetting<T extends SettingValue = SettingValue> {
|
|
19
|
+
/** Default value for the setting */
|
|
20
|
+
default: T
|
|
21
|
+
/** Human-readable label for UI */
|
|
22
|
+
label?: string
|
|
23
|
+
/** Description of the setting */
|
|
24
|
+
description?: string
|
|
25
|
+
/** Minimum value (for number settings) */
|
|
26
|
+
min?: number
|
|
27
|
+
/** Maximum value (for number settings) */
|
|
28
|
+
max?: number
|
|
29
|
+
/** Step value (for number settings) */
|
|
30
|
+
step?: number
|
|
31
|
+
/** Available options (for string settings) */
|
|
32
|
+
options?: string[]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Module settings schema.
|
|
37
|
+
*/
|
|
38
|
+
export type ModuleSettingsSchema = Record<string, ModuleSetting>
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Infer settings object type from schema.
|
|
42
|
+
*/
|
|
43
|
+
export type InferSettings<T extends ModuleSettingsSchema> = {
|
|
44
|
+
[K in keyof T]: T[K]['default']
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Module manifest - describes a renderer module's identity and configuration.
|
|
49
|
+
*/
|
|
50
|
+
export interface ModuleManifest<TSettings extends ModuleSettingsSchema = ModuleSettingsSchema> {
|
|
51
|
+
/** Unique identifier for the module */
|
|
52
|
+
id: string
|
|
53
|
+
/** Human-readable name */
|
|
54
|
+
name: string
|
|
55
|
+
/** Brief description */
|
|
56
|
+
description?: string
|
|
57
|
+
/** Module version */
|
|
58
|
+
version?: string
|
|
59
|
+
/** Settings schema for this module */
|
|
60
|
+
settings: TSettings
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Module context provided to modules during initialization.
|
|
65
|
+
*/
|
|
66
|
+
export interface ModuleContext {
|
|
67
|
+
/** The Three.js scene */
|
|
68
|
+
scene: THREE.Scene
|
|
69
|
+
/** Get the current camera position */
|
|
70
|
+
getCameraPosition: () => THREE.Vector3
|
|
71
|
+
/** Register a callback to be called each frame */
|
|
72
|
+
onRender: (callback: () => void) => void
|
|
73
|
+
/** Unregister a render callback */
|
|
74
|
+
offRender: (callback: () => void) => void
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Base interface for renderer modules.
|
|
79
|
+
*/
|
|
80
|
+
export interface RendererModule<TSettings extends ModuleSettingsSchema = ModuleSettingsSchema> {
|
|
81
|
+
/** Module manifest */
|
|
82
|
+
readonly manifest: ModuleManifest<TSettings>
|
|
83
|
+
|
|
84
|
+
/** Current settings values */
|
|
85
|
+
readonly settings: InferSettings<TSettings>
|
|
86
|
+
|
|
87
|
+
/** Whether the module is currently enabled */
|
|
88
|
+
enabled: boolean
|
|
89
|
+
|
|
90
|
+
/** Initialize the module with context */
|
|
91
|
+
init(context: ModuleContext): void
|
|
92
|
+
|
|
93
|
+
/** Update a setting value */
|
|
94
|
+
setSetting<K extends keyof TSettings>(key: K, value: TSettings[K]['default']): void
|
|
95
|
+
|
|
96
|
+
/** Called when module is enabled */
|
|
97
|
+
onEnable?(): void
|
|
98
|
+
|
|
99
|
+
/** Called when module is disabled */
|
|
100
|
+
onDisable?(): void
|
|
101
|
+
|
|
102
|
+
/** Cleanup and dispose resources */
|
|
103
|
+
dispose(): void
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Module factory function type.
|
|
108
|
+
*/
|
|
109
|
+
export type ModuleFactory<TSettings extends ModuleSettingsSchema = ModuleSettingsSchema> =
|
|
110
|
+
() => RendererModule<TSettings>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { proxy } from 'valtio'
|
|
2
|
+
import type { GameMode, HandItemBlock, BlocksShapes, BlockShape, MovementState, CameraPerspective, Team, ItemSpecificContextProperties } from './types'
|
|
3
|
+
|
|
4
|
+
// edit src/mineflayer/playerState.ts for implementation of player state from mineflayer
|
|
5
|
+
export const getInitialPlayerState = () => proxy({
|
|
6
|
+
playerSkin: undefined as string | undefined,
|
|
7
|
+
inWater: false,
|
|
8
|
+
waterBreathing: false,
|
|
9
|
+
backgroundColor: [0, 0, 0] as [number, number, number],
|
|
10
|
+
ambientLight: 0,
|
|
11
|
+
directionalLight: 0,
|
|
12
|
+
eyeHeight: 0,
|
|
13
|
+
gameMode: undefined as GameMode | undefined,
|
|
14
|
+
lookingAtBlock: undefined as {
|
|
15
|
+
x: number
|
|
16
|
+
y: number
|
|
17
|
+
z: number
|
|
18
|
+
face?: number
|
|
19
|
+
shapes: BlocksShapes
|
|
20
|
+
} | undefined,
|
|
21
|
+
diggingBlock: undefined as {
|
|
22
|
+
x: number
|
|
23
|
+
y: number
|
|
24
|
+
z: number
|
|
25
|
+
stage: number
|
|
26
|
+
face?: number
|
|
27
|
+
mergedShape: BlockShape | undefined
|
|
28
|
+
} | undefined,
|
|
29
|
+
movementState: 'NOT_MOVING' as MovementState,
|
|
30
|
+
onGround: true,
|
|
31
|
+
sneaking: false,
|
|
32
|
+
flying: false,
|
|
33
|
+
sprinting: false,
|
|
34
|
+
itemUsageTicks: 0,
|
|
35
|
+
username: '',
|
|
36
|
+
onlineMode: false,
|
|
37
|
+
lightingDisabled: false,
|
|
38
|
+
shouldHideHand: false,
|
|
39
|
+
heldItemMain: undefined as HandItemBlock | undefined,
|
|
40
|
+
heldItemOff: undefined as HandItemBlock | undefined,
|
|
41
|
+
perspective: 'first_person' as CameraPerspective,
|
|
42
|
+
onFire: false,
|
|
43
|
+
|
|
44
|
+
cameraSpectatingEntity: undefined as number | undefined,
|
|
45
|
+
|
|
46
|
+
team: undefined as Team | undefined,
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
export const getPlayerStateUtils = (reactive: PlayerStateReactive) => ({
|
|
50
|
+
isSpectator() {
|
|
51
|
+
return reactive.gameMode === 'spectator'
|
|
52
|
+
},
|
|
53
|
+
isSpectatingEntity() {
|
|
54
|
+
return reactive.cameraSpectatingEntity !== undefined && reactive.gameMode === 'spectator'
|
|
55
|
+
},
|
|
56
|
+
isThirdPerson() {
|
|
57
|
+
if ((this as PlayerStateUtils).isSpectatingEntity()) return false
|
|
58
|
+
return reactive.perspective === 'third_person_back' || reactive.perspective === 'third_person_front'
|
|
59
|
+
}
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
export const getInitialPlayerStateRenderer = () => ({
|
|
63
|
+
reactive: getInitialPlayerState()
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
export type PlayerStateReactive = ReturnType<typeof getInitialPlayerState>
|
|
67
|
+
export type PlayerStateUtils = ReturnType<typeof getPlayerStateUtils>
|
|
68
|
+
|
|
69
|
+
export type PlayerStateRenderer = PlayerStateReactive
|
|
70
|
+
|
|
71
|
+
export const getItemSelector = (playerState: PlayerStateRenderer, specificProperties: ItemSpecificContextProperties, item?: import('prismarine-item').Item) => {
|
|
72
|
+
return {
|
|
73
|
+
...specificProperties,
|
|
74
|
+
'minecraft:date': new Date(),
|
|
75
|
+
// "minecraft:context_dimension": bot.entityp,
|
|
76
|
+
// 'minecraft:time': bot.time.timeOfDay / 24_000,
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ItemSelector } from 'mc-assets/dist/itemDefinitions'
|
|
2
|
+
|
|
3
|
+
export type GameMode = 'survival' | 'creative' | 'adventure' | 'spectator'
|
|
4
|
+
|
|
5
|
+
export interface Team {
|
|
6
|
+
team?: any
|
|
7
|
+
id: string
|
|
8
|
+
name: string
|
|
9
|
+
color: string
|
|
10
|
+
prefix: string
|
|
11
|
+
suffix: string
|
|
12
|
+
players: string[]
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface HandItemBlock {
|
|
16
|
+
name?: string
|
|
17
|
+
properties?: Record<string, any>
|
|
18
|
+
fullItem?: any
|
|
19
|
+
type: 'block' | 'item' | 'hand'
|
|
20
|
+
id?: number
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type MovementState = 'NOT_MOVING' | 'WALKING' | 'SPRINTING' | 'SNEAKING'
|
|
24
|
+
export type ItemSpecificContextProperties = Partial<
|
|
25
|
+
Pick<
|
|
26
|
+
ItemSelector['properties'],
|
|
27
|
+
| 'minecraft:using_item'
|
|
28
|
+
| 'minecraft:use_duration'
|
|
29
|
+
| 'minecraft:use_cycle'
|
|
30
|
+
| 'minecraft:display_context'
|
|
31
|
+
>
|
|
32
|
+
>
|
|
33
|
+
export type CameraPerspective = 'first_person' | 'third_person_back' | 'third_person_front'
|
|
34
|
+
|
|
35
|
+
export type BlockShape = { position: { x: number, y: number, z: number }; width: number; height: number; depth: number; }
|
|
36
|
+
export type BlocksShapes = BlockShape[]
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { EntityMesh, rendererSpecialHandled, EntityDebugFlags } from '@/three/entity/EntityMesh'
|
|
2
|
+
|
|
3
|
+
export const displayEntitiesDebugList = (version: string) => {
|
|
4
|
+
// Create results container
|
|
5
|
+
const container = document.createElement('div')
|
|
6
|
+
container.style.cssText = `
|
|
7
|
+
position: fixed;
|
|
8
|
+
top: 50%;
|
|
9
|
+
left: 50%;
|
|
10
|
+
transform: translate(-50%, -50%);
|
|
11
|
+
max-height: 90vh;
|
|
12
|
+
overflow-y: auto;
|
|
13
|
+
background: rgba(0,0,0,0.8);
|
|
14
|
+
color: white;
|
|
15
|
+
padding: 20px;
|
|
16
|
+
border-radius: 8px;
|
|
17
|
+
font-family: monospace;
|
|
18
|
+
min-width: 400px;
|
|
19
|
+
z-index: 1000;
|
|
20
|
+
`
|
|
21
|
+
document.body.appendChild(container)
|
|
22
|
+
|
|
23
|
+
// Add title
|
|
24
|
+
const title = document.createElement('h2')
|
|
25
|
+
title.textContent = 'Minecraft Entity Support'
|
|
26
|
+
title.style.cssText = 'margin-top: 0; text-align: center;'
|
|
27
|
+
container.appendChild(title)
|
|
28
|
+
|
|
29
|
+
// Test entities
|
|
30
|
+
const results: Array<{
|
|
31
|
+
entity: string;
|
|
32
|
+
supported: boolean;
|
|
33
|
+
type?: 'obj' | 'bedrock' | 'special';
|
|
34
|
+
mappedFrom?: string;
|
|
35
|
+
textureMap?: boolean;
|
|
36
|
+
errors?: string[];
|
|
37
|
+
}> = []
|
|
38
|
+
const { mcData } = window
|
|
39
|
+
const entityNames = Object.keys(mcData.entitiesArray.reduce((acc, entity) => {
|
|
40
|
+
acc[entity.name] = true
|
|
41
|
+
return acc
|
|
42
|
+
}, {}))
|
|
43
|
+
|
|
44
|
+
// Add loading indicator
|
|
45
|
+
const loading = document.createElement('div')
|
|
46
|
+
loading.textContent = 'Testing entities...'
|
|
47
|
+
loading.style.textAlign = 'center'
|
|
48
|
+
container.appendChild(loading)
|
|
49
|
+
|
|
50
|
+
for (const entity of entityNames) {
|
|
51
|
+
const debugFlags: EntityDebugFlags = {}
|
|
52
|
+
|
|
53
|
+
if (rendererSpecialHandled.includes(entity)) {
|
|
54
|
+
results.push({
|
|
55
|
+
entity,
|
|
56
|
+
supported: true,
|
|
57
|
+
type: 'special',
|
|
58
|
+
})
|
|
59
|
+
continue
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
try {
|
|
63
|
+
|
|
64
|
+
const { mesh: entityMesh } = new EntityMesh(version, entity, undefined, {}, debugFlags)
|
|
65
|
+
// find the most distant pos child
|
|
66
|
+
window.objects ??= {}
|
|
67
|
+
window.objects[entity] = entityMesh
|
|
68
|
+
|
|
69
|
+
results.push({
|
|
70
|
+
entity,
|
|
71
|
+
supported: !!debugFlags.type || rendererSpecialHandled.includes(entity),
|
|
72
|
+
type: debugFlags.type,
|
|
73
|
+
mappedFrom: debugFlags.tempMap,
|
|
74
|
+
textureMap: debugFlags.textureMap,
|
|
75
|
+
errors: debugFlags.errors
|
|
76
|
+
})
|
|
77
|
+
} catch (e) {
|
|
78
|
+
console.error(e)
|
|
79
|
+
results.push({
|
|
80
|
+
entity,
|
|
81
|
+
supported: false,
|
|
82
|
+
mappedFrom: debugFlags.tempMap
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Remove loading indicator
|
|
88
|
+
loading.remove()
|
|
89
|
+
|
|
90
|
+
const createSection = (title: string, items: any[], filter: (item: any) => boolean) => {
|
|
91
|
+
const section = document.createElement('div')
|
|
92
|
+
section.style.marginBottom = '20px'
|
|
93
|
+
|
|
94
|
+
const sectionTitle = document.createElement('h3')
|
|
95
|
+
sectionTitle.textContent = title
|
|
96
|
+
sectionTitle.style.textAlign = 'center'
|
|
97
|
+
section.appendChild(sectionTitle)
|
|
98
|
+
|
|
99
|
+
const list = document.createElement('ul')
|
|
100
|
+
list.style.cssText = 'padding-left: 20px; list-style-type: none; margin: 0;'
|
|
101
|
+
|
|
102
|
+
const filteredItems = items.filter(filter)
|
|
103
|
+
for (const item of filteredItems) {
|
|
104
|
+
const listItem = document.createElement('li')
|
|
105
|
+
listItem.style.cssText = 'line-height: 1.4; margin: 8px 0;'
|
|
106
|
+
|
|
107
|
+
const entityName = document.createElement('strong')
|
|
108
|
+
entityName.style.cssText = 'user-select: text;-webkit-user-select: text;'
|
|
109
|
+
entityName.textContent = item.entity
|
|
110
|
+
listItem.appendChild(entityName)
|
|
111
|
+
|
|
112
|
+
let text = ''
|
|
113
|
+
if (item.mappedFrom) {
|
|
114
|
+
text += ` -> ${item.mappedFrom}`
|
|
115
|
+
}
|
|
116
|
+
if (item.type) {
|
|
117
|
+
text += ` - ${item.type}`
|
|
118
|
+
}
|
|
119
|
+
if (item.textureMap) {
|
|
120
|
+
text += ' ⚠️'
|
|
121
|
+
}
|
|
122
|
+
if (item.errors) {
|
|
123
|
+
text += ' ❌'
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
listItem.appendChild(document.createTextNode(text))
|
|
127
|
+
list.appendChild(listItem)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
section.appendChild(list)
|
|
131
|
+
return { section, count: filteredItems.length }
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Sort results - bedrock first
|
|
135
|
+
results.sort((a, b) => {
|
|
136
|
+
if (a.type === 'bedrock' && b.type !== 'bedrock') return -1
|
|
137
|
+
if (a.type !== 'bedrock' && b.type === 'bedrock') return 1
|
|
138
|
+
return a.entity.localeCompare(b.entity)
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
// Add sections
|
|
142
|
+
const sections = [
|
|
143
|
+
{
|
|
144
|
+
title: '❌ Unsupported Entities',
|
|
145
|
+
filter: (r: any) => !r.supported && !r.mappedFrom
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
title: '⚠️ Partially Supported Entities',
|
|
149
|
+
filter: (r: any) => r.mappedFrom
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
title: '✅ Supported Entities',
|
|
153
|
+
filter: (r: any) => r.supported && !r.mappedFrom
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
|
|
157
|
+
for (const { title, filter } of sections) {
|
|
158
|
+
const { section, count } = createSection(title, results, filter)
|
|
159
|
+
if (count > 0) {
|
|
160
|
+
container.appendChild(section)
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// log object with errors per entity
|
|
165
|
+
const errors = results.filter(r => r.errors).map(r => ({
|
|
166
|
+
entity: r.entity,
|
|
167
|
+
errors: r.errors
|
|
168
|
+
}))
|
|
169
|
+
console.log(errors)
|
|
170
|
+
}
|