8.5 KiB
8.5 KiB
Cobblemon NPC Creator - Project Structure
Project Overview
Cobblemon NPC Creator is a comprehensive web application designed for creating and customizing Non-Player Characters (NPCs) for the Cobblemon Minecraft mod. This tool provides a visual interface for configuring NPC behavior, dialogue systems, battle configurations, and Pokemon parties, then exports them as JSON files compatible with the Cobblemon mod.
Purpose
The application simplifies the complex process of creating NPCs for Cobblemon by:
- Providing an intuitive UI for NPC configuration
- Offering real-time validation and error checking
- Supporting visual dialogue tree creation with MoLang expressions
- Integrating with the Pokemon API for accurate Pokemon data
- Generating properly formatted JSON files for mod integration
Technology Stack
- Frontend Framework: React 19.1.1
- Language: TypeScript 5.8.3
- Build Tool: Vite 7.1.0
- Styling: Tailwind CSS 3.4.17 with @tailwindcss/forms plugin
- Icons: Lucide React 0.539.0
- File Handling: JSZip 3.10.1 (for datapack export), file-saver 2.0.5
- Linting: ESLint 9.32.0
- Node: 22.12.0 (managed via Volta)
Project Arborescence
npc-config-app/
│
├── public/ # Static assets
│ └── vite.svg # Vite logo
│
├── src/ # Source code directory
│ ├── components/ # React components
│ │ ├── ConfigVariablesEditor.tsx # Editor for MoLang config variables
│ │ ├── DialogueEditor.tsx # Visual dialogue tree editor
│ │ ├── ImportExport.tsx # Import/Export functionality with datapack support
│ │ ├── JSONPreview.tsx # JSON output preview component
│ │ ├── NPCBasicSettings.tsx # Basic NPC configuration (name, model, etc.)
│ │ ├── NPCBattleConfiguration.tsx # Battle-related settings (victory, defeat, flee)
│ │ ├── NPCInteractionEditor.tsx # Interaction system configuration
│ │ ├── NPCPartyBuilder.tsx # Pokemon party management interface
│ │ ├── PokemonCard.tsx # Individual Pokemon display card
│ │ ├── PokemonFormSelector.tsx # Pokemon form/variant selector
│ │ ├── PokemonSelector.tsx # Pokemon search and selection interface
│ │ └── ValidationPanel.tsx # Real-time validation and error display
│ │
│ ├── services/ # External services and APIs
│ │ └── pokemonApi.ts # Pokemon API integration (PokeAPI)
│ │
│ ├── types/ # TypeScript type definitions
│ │ └── npc.ts # NPC configuration type definitions
│ │
│ ├── utils/ # Utility functions
│ │ └── validation.ts # Validation logic for NPC configurations
│ │
│ ├── App.css # Application-specific styles
│ ├── App.tsx # Main application component
│ ├── index.css # Global styles and Tailwind directives
│ ├── main.tsx # Application entry point
│ └── vite-env.d.ts # Vite environment type declarations
│
├── .claude/ # Claude Code configuration
├── .git/ # Git repository data
├── .idea/ # IntelliJ IDEA configuration
│
├── .gitignore # Git ignore rules
├── eslint.config.js # ESLint configuration
├── index.html # HTML entry point
├── package.json # Project dependencies and scripts
├── package-lock.json # Locked dependency versions
├── POKEMON_FEATURES.md # Pokemon feature documentation
├── postcss.config.js # PostCSS configuration for Tailwind
├── README.md # Project readme and quick start guide
├── tailwind.config.js # Tailwind CSS configuration
├── tsconfig.json # TypeScript configuration (base)
├── tsconfig.app.json # TypeScript configuration for app
├── tsconfig.node.json # TypeScript configuration for Node.js
└── vite.config.ts # Vite build configuration
Directory Structure Explained
/src/components/
Contains all React components organized by functionality:
Core Configuration Components:
NPCBasicSettings.tsx- Handles basic NPC properties like name, model, textureNPCBattleConfiguration.tsx- Manages battle-related configurationsNPCInteractionEditor.tsx- Controls interaction system setupConfigVariablesEditor.tsx- Editor for MoLang configuration variables
Pokemon Party Components:
NPCPartyBuilder.tsx- Main interface for building Pokemon teamsPokemonSelector.tsx- Search and select Pokemon from the APIPokemonCard.tsx- Displays individual Pokemon with statsPokemonFormSelector.tsx- Allows selection of Pokemon forms/variants
Dialogue & Export Components:
DialogueEditor.tsx- Visual dialogue tree editor with node-based interfaceImportExport.tsx- JSON export/import with datapack generationJSONPreview.tsx- Live preview of generated JSONValidationPanel.tsx- Real-time validation feedback
/src/services/
External service integrations:
pokemonApi.ts- Interfaces with PokeAPI for Pokemon data (sprites, forms, stats)
/src/types/
TypeScript type definitions:
npc.ts- Complete type definitions for NPC configuration objects
/src/utils/
Utility functions:
validation.ts- Validation rules and error checking for NPC configurations
Root Configuration Files
package.json- Defines project metadata, dependencies, and npm scriptsvite.config.ts- Vite bundler configurationtailwind.config.js- Tailwind CSS customizationtsconfig.*.json- TypeScript compiler configurationseslint.config.js- Code linting rulespostcss.config.js- PostCSS plugins (Tailwind, Autoprefixer)
Key Features
1. NPC Configuration
- Basic settings (name, model, texture, cooldown)
- Battle configuration (victory/defeat/flee scripts)
- Party building with up to 6 Pokemon
- Interaction system setup
2. Dialogue System
- Visual tree-based dialogue editor
- Support for MoLang expressions
- Multiple action types per dialogue node
- Import/export dialogue configurations
3. Pokemon Integration
- Real-time Pokemon search via PokeAPI
- Form/variant selection
- Automatic sprite loading
- Level and shiny status configuration
4. Import/Export
- JSON preview with syntax highlighting
- Export as individual JSON files
- Export as Minecraft datapack (ZIP format)
- Import existing configurations
5. Validation
- Real-time error checking
- Warning system for potential issues
- Required field validation
- MoLang expression validation
Development Workflow
Available Scripts
npm run dev # Start development server (Vite)
npm run build # Build for production (TypeScript + Vite)
npm run lint # Run ESLint
npm run preview # Preview production build
Development Server
- Runs on
http://localhost:5173 - Hot Module Replacement (HMR) enabled
- TypeScript type checking on save
Data Flow
- User Input → Components update React state
- State Changes → Validation utils check for errors
- Valid Data → JSON Preview updates in real-time
- Export Action → Files generated via file-saver/JSZip
- Pokemon Search → API service fetches from PokeAPI
- Import Action → JSON parsed and state populated
Export Formats
Individual Files
<npc-name>.json- NPC configuration<dialogue-name>.json- Dialogue configuration (if applicable)
Datapack Format
datapack.zip
└── data/
└── cobblemon/
└── npc/
├── configuration/
│ └── <npc-name>.json
└── dialogues/
└── <dialogue-name>.json
Future Considerations
Based on the project structure, potential areas for expansion:
- Additional component categories (quests, rewards)
- More sophisticated validation rules
- Custom Pokemon sprite support
- Multi-language dialogue support
- Template system for common NPC types