mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-13 06:37:34 +00:00
2.4 KiB
2.4 KiB
core/ — MC-Free Game Logic
Core contains version-independent game logic: controllers, data classes, constants, utilities.
It depends only on platform-api/ interfaces — never on MC classes, wrappers, or Forge.
Structure
noppes/npcs/controllers/ → FactionController, MagicController, TransportController, etc.
noppes/npcs/controllers/data/ → Faction, Magic, Tag, TransportLocation, Frame, Lines, etc.
noppes/npcs/constants/ → 40+ enums (EnumRoleType, EnumQuestType, EnumAnimation, etc.)
noppes/npcs/core/ → NBT factory, CoreConfig
noppes/npcs/util/ → ValueUtil, LRUHashMap, CacheHashMap, MillisTimer
noppes/npcs/ → NBTTags.java
kamkeel/npcs/ → Additional controllers, network enums, utilities, developer registry
Forbidden Imports
Core code must never import:
net.minecraft.*,cpw.mods.*,net.minecraftforge.*,org.spongepowered.*- Wrapper classes from
src/main/java/(mc1710 module) - Only allowed:
java.*,javax.*,noppes.npcs.*,kamkeel.npcs.*(from core + platform-api)
Key Patterns
| MC Concept | Core Replacement |
|---|---|
new NBTTagCompound() |
NBT.compound() |
CompressedStreamTools |
PlatformServiceHolder.get().readCompressedNBT() |
LogWriter |
PlatformServiceHolder.get().logError() |
CustomNpcs.getWorldSaveDirectory() |
PlatformServiceHolder.get().getWorldSaveDirectory() |
EntityPlayer param |
IPlayer (via platform-api — noppes.npcs.api.entity.IPlayer) |
ItemStack param |
IItemStack (via platform-api — noppes.npcs.api.item.IItemStack) |
World param |
IWorld (via platform-api — noppes.npcs.api.IWorld) |
Split-Package Shadows
Core classes share packages with mc1710 classes. The mc1710 version can:
- Add
implements IFaction,implements IFactionHandler(scripting API) - Re-add
SyncControllercalls for network sync - Override methods that need
ItemStack,EntityPlayer, etc.
Adding New Core Code
- Ensure zero MC imports — use platform-api interfaces
- NBT via
NBT.compound()/NBT.list(), file I/O viaPlatformServiceHolder - Stub out methods needing MC types — mc1710 shadow adds them
- Follow existing package structure (controllers →
controllers/, data →controllers/data/) - NEVER create duplicate interface names — use
IPlayer,IItemStack,IWorld,IEntityetc. from platform-api as-is