notevil
8dff4c0e03
WIP Phase 2.5 : fork render pipeline (PatchedEntityRenderer family)
...
Fork EF client renderer patched/entity/ → rig/render/, imports rewrités.
Nouveaux fichiers :
- render/PatchedEntityRenderer.java (~96 LOC, était stub 16 LOC) — base abstraite,
mulPoseStack + setArmaturePose + nameplate via mixin invoker
- render/PatchedLivingEntityRenderer.java (~230 LOC, EF 294 → stripped) — hot path
render, strippé du JSON customLayers loading + EntityDecorations (pas impl. côté
LivingEntityPatch TiedUp)
- render/PHumanoidRenderer.java (~95 LOC, EF 53 → adapté) — intermediate
biped, baby head scale, enregistre PatchedArmorLayer + PatchedItemInHandLayer
- render/TiedUpPlayerRenderer.java (~95 LOC, EF PPlayerRenderer 60 → adapté) —
dispatch slim/default (Meshes.ALEX vs BIPED), propage modelParts visible flags,
skip cape/bee/arrow layers (V3-REW-08/09)
- render/PatchedLayer.java (~55 LOC) — base no-op layer
- render/PatchedArmorLayer.java (~45 LOC) — stub no-op (V3-REW-04)
- render/PatchedItemInHandLayer.java (~45 LOC) — stub no-op (Phase 3)
- mixin/client/MixinEntityRenderer.java (~35 LOC) — invoker shouldShowName +
renderNameTag (EF verbatim)
- mixin/client/MixinLivingEntityRenderer.java (~30 LOC) — invoker isBodyVisible,
getRenderType, getBob
Modifs :
- resources/tiedup-rig.mixins.json : enregistre les 2 nouveaux mixins client
Dépendances stubbées :
- PatchedArmorLayer / PatchedItemInHandLayer no-op — "mangent" le layer vanilla
équivalent pour éviter double-rendu, mais ne dessinent rien. À implémenter
Phase 3 (armor : V3-REW-04 ; item-in-hand : tool joints GLB).
- EntityDecorations (color/light/overlay modifiers) strippées du render path —
le patch TiedUp n'expose pas encore cette API. Hurt/death overlay natifs
conservés. À rework si feature premium glow/tint NPC.
TODOs Phase 2.6 / Phase 3 :
- animated_layers/*.json datapack-driven loading (strippé du constructor) si
besoin futur
- PlayerItemInHandLayer (version player-spécifique, distincte de ItemInHandLayer
générique) pas encore mangée côté player → layer vanilla continue de draw
- ElytraLayer / CustomHeadLayer pas mangés (cohérent "on mange juste les layers
qui entrent en conflit avec le mesh skinné")
Surprise pendant le fork :
- ItemInHandLayer vanilla MC 1.20.1 exige M extends EntityModel<E> & ArmedModel,
pas HeadedModel comme PatchedItemInHandLayer EF 1.20.1 pouvait le suggérer
via ses anciennes versions. Alignement forcé sur ArmedModel.
- EF utilise 2 mixins @Invoker (MixinEntityRenderer / MixinLivingEntityRenderer)
pour accéder aux méthodes protected de vanilla — forkés verbatim dans
rig/mixin/client/.
Tests :
- ./gradlew compileJava : BUILD SUCCESSFUL
- ./gradlew test --tests "com.tiedup.remake.rig.*" : 15/15 GREEN
(TiedUpArmaturesTest 4 + GlbJointAliasTableTest 4 + GltfToSkinnedMeshTest 6 =
14 rig + 1 utilitaire)
2026-04-22 22:39:41 +02:00
notevil
3aec681436
Phase 2.2 : fork mesh/transformer/ (vanilla PlayerModel → SkinnedMesh)
...
COPY verbatim EF + rewrite imports :
- rig/mesh/transformer/VanillaModelTransformer.java (~700 LOC)
Transformer principal : bake PlayerModel vanilla / HumanoidModel → SkinnedMesh biped
EF. Utilise les PartTransformer (HEAD/ARM/LEG/CHEST) avec AABB cover area.
- rig/mesh/transformer/HumanoidModelTransformer.java (~70 LOC)
Base abstract commune aux transformers humanoïdes.
- rig/mesh/transformer/HumanoidModelBaker.java (~115 LOC)
Entry point bake() + export JSON + registry MODEL_TRANSFORMERS.
L'ancienne stub de VanillaMeshPartDefinition (record 55 LOC) est remplacée par
la vraie record dans le fork — API identique (of(partName), of(partName, path,
invertedParentTransform, root)).
Ajouté mixin accessor :
- rig/mixin/client/MixinAgeableListModel.java (@Invoker pour headParts/bodyParts
sur AgeableListModel).
- src/main/resources/tiedup-rig.mixins.json (nouveau mixin config, package
com.tiedup.remake.rig.mixin).
- build.gradle : args '-mixin.config=tiedup-rig.mixins.json' dans client+server
run configs.
- META-INF/mods.toml : [[mixins]] config="tiedup-rig.mixins.json"
Logger EpicFightMod.LOGGER → TiedUpRigConstants.LOGGER dans HumanoidModelBaker.
Packages correctement rewrités par scripts/rig-rewrite-imports.sh. Compile
BUILD SUCCESSFUL maintenu.
2026-04-22 20:59:32 +02:00
notevil
1cef57a472
Phase 0 : compile SUCCESS (464 -> 0 errors)
...
Core data model du rig EF extractible compile désormais cleanly.
Changements clé :
1. AccessTransformer wiring (-80 errors)
- Copie EF accesstransformer.cfg dans resources/META-INF/
- Uncomment accessTransformer = file(...) dans build.gradle
- Débloque l'héritage des package-private RenderType.CompositeState +
RenderType.CompositeRenderType + RenderType.OutlineProperty nécessaires
à TiedUpRenderTypes.
2. Stubs compat rendering Phase 2
- PatchedEntityRenderer<E,T,M,R> : type param 4 pour PrepareModelEvent
- RenderItemBase : type marker pour PatchedRenderersEvent.RegisterItemRenderer
- LayerUtil + LayerProvider : interface fonctionnelle 5-params pour RegisterResourceLayersEvent
- PlayerPatch<T extends Player> : extends LivingEntityPatch
- ToolHolderArmature interface : leftTool/rightTool/backToolJoint()
3. Stubs compat combat Phase 2+
- AttackResult + ResultType enum : utilisé comme type pour StateFactor ATTACK_RESULT
- TrailInfo record : stubbé avec playable=false → particle trail jamais émis
- AttackAnimation.Phase.hand = InteractionHand.MAIN_HAND
- AttackAnimation.JointColliderPair : stub pour instanceof check
- AttackAnimation.getPhaseByTime(float) : retourne Phase neutre
- ActionAnimation.correctRootJoint() : no-op Phase 0
- ActionAnimation.BEGINNING_LOCATION + INITIAL_LOOK_VEC_DOT re-exposés comme AnimationVariables
4. Physics types alignés
- InverseKinematicsProvider extends SimulationProvider<...>
- InverseKinematicsSimulator implements PhysicsSimulator<Joint, ...>
- InverseKinematicsObject implements SimulationObject<...>
- InverseKinematicsBuilder extends SimulationObject.SimulationObjectBuilder
- ik.bake() signature : (Object, Object, boolean, boolean) conforme StaticAnimation usage
5. Mesh/compute stubs
- ComputeShaderSetup.TOTAL_POSES + TOTAL_NORMALS : OpenMatrix4f[MAX_JOINTS] pool
- ComputeShaderSetup.MeshPartBuffer inner class + destroyBuffers()
- ComputeShaderProvider.supportComputeShader() = false
- VanillaModelTransformer.VanillaMeshPartDefinition record minimal
- HumanoidMesh.getHumanoidArmorModel() : return null (armor rendering Phase 2)
6. Fixes typage / API
- TiedUpRenderTypes.prefix("x").toString() x15 : ResourceLocation -> String
- AnimationManager Logger : log4j -> slf4j
- TiedUpRigConstants.logAndStacktraceIfDevSide 4-arg overload + Throwable instead of RuntimeException
- LivingEntityPatch.getReach(InteractionHand) overload
- StaticAnimation(boolean, String, AssetAccessor) 3-arg overload
Result : compileJava -> BUILD SUCCESSFUL
Prochain jalon : runClient + verify rig se charge sans crash.
2026-04-22 03:16:14 +02:00
NotEvil
fe36a1a47e
vary room theme weights — sculk rare, inferno/ice uncommon
2026-04-17 04:08:02 +02:00
NotEvil
fd60086322
feat(i18n): complete migration — items, entities, AI goals, GUI screens
...
119 new translation keys across 3 domains:
- Items/Blocks/Misc (46 keys): tooltips, action messages, trap states
- Entities/AI Goals (55 keys): NPC speech, maid/master/guard messages
- Client GUI (18 keys): widget labels, screen buttons, merchant display
Remaining 119 Component.literal() are all intentional:
- Debug/Admin/Command wands (47) — dev tools, not player-facing
- Entity display names (~25) — dynamic getNpcName() calls
- Empty string roots (~15) — .append() chain bases
- User-typed text (~10) — /me, /pm, /norp chat content
- Runtime data (~12) — StringBuilder, gag muffling, MCA compat
2026-04-16 12:33:13 +02:00
NotEvil
9b2c5dec8e
chore(P2): V1 zombie comments cleanup + i18n events/network/items
...
Zombie comments (14 files):
- Replace references to deleted V1 classes (ItemBind, ItemCollar, IBondageItem,
BindVariant, etc.) with V2 equivalents or past-tense historical notes
- "V1 path" → "legacy slot-index path" for still-active legacy codepaths
- Clean misleading javadoc that implied V1 code was still present
i18n (13 files, 31 new keys):
- Events: 12 Component.literal() → translatable (labor tools, gag eat,
death escape, debt, punishment, grace, camp protection, chest, maid)
- Network: 12 Component.literal() → translatable (trader messages,
lockpick jam, slave freedom warnings)
- Items: 2 Component.literal() → translatable (ItemOwnerTarget tooltips)
2026-04-16 11:20:17 +02:00
NotEvil
371a138b71
fix(P1+P2): swarm review — UX fixes + V1 dead code cleanup
...
P1 — UX visible:
- Add 4 missing translations (leather_mittens, ball_gag_3d, taser, debug_wand)
- Fix earplugs resistance bucket: "blindfold" → "earplug"
- Split mixin config: core (require=1) + compat MCA (require=0)
- Bump PROTOCOL_VERSION from "1" to "2"
- Add debug_wand item model (no texture — debug only)
- Fix 3 display_name inconsistencies (chain, vine_seed, shock_collar_auto)
P2 — Dead code cleanup:
- Delete IHas3DModelConfig + Model3DConfig (zero imports)
- Remove MovementStyleResolver.resolveV1Fallback() + V1Fallback record + V1 constants
- Remove AnimationTickHandler V1 fallback block + buildAnimationId()
- Document PlayerEquipment.equipInRegion() bypass as intentional (force-equip paths)
2026-04-16 10:58:44 +02:00
NotEvil
6d9d6b4b81
fix(UC-02): arch review — furniture x/z offsets + ceiling chain fidelity
...
- Add x_offset/z_offset to PositionedBlock for multi-block furniture clusters
- Furniture items now spread across 2-3 positions (matching original Java code)
- Offsets multiplied by inward direction for correct corner orientation
- Fix has_ceiling_chain: only oubliette has ceiling chains (was true for all 6)
- Fix firstCornerSpecial: oubliette cauldron uses x/z offset +1 (inward diagonal)
- Update parser to read x_offset/z_offset (defaults to 0)
2026-04-16 01:52:31 +02:00
NotEvil
706172fb9a
fix(UC-02): QA review — crypt bottom_row + ice decorations fidelity
...
- BUG-001: CRYPT bottom_row had unreachable mossy_stone_bricks (same f variable
makes mossy_cobblestone guard trigger first). Fixed weights: 0.20/0.10/0.70
- BUG-003: ICE ceiling ice stalactites (y_offset=10) were missing from JSON
- BUG-002: ICE snow corner layers use middle value (3) as compromise since
DecorationConfig.PositionedBlock doesn't support random_property
2026-04-16 01:45:04 +02:00
NotEvil
3aaf92b788
feat(UC-02): data-driven room themes — 6 JSON + consumer migration + cleanup
...
Phase 3: Extract 6 themes into JSON (oubliette, inferno, crypt, ice, sculk, sandstone)
Phase 4: Migrate HangingCagePiece to use RoomThemeRegistry.pickRandomOrFallback()
- Move 7 shared static methods from RoomTheme into HangingCagePiece
- Replace per-enum placeDecorations() with generic DecorationConfig-based placement
Phase 5: Delete RoomTheme.java (-1368L)
2026-04-16 01:39:40 +02:00
NotEvil
c34bac11b0
fix(C-01): review fixes — missing keys, duplicate, GPS shock i18n
...
- Add missing keephead_enabled/disabled translation keys (BUG-001)
- Remove duplicate gui.tiedup.close key at line 403 (RISK-004)
- Fix GPS shock: use null addon + send GPS_ZONE_VIOLATION separately (RISK-001)
2026-04-15 14:08:41 +02:00
NotEvil
fa5cfb913c
feat(C-01): i18n main commands — 148 translatable keys
...
Phase 3: Migrate Component.literal() in all remaining command files.
- NPCCommand (34), CellCommand (33), SocialCommand (16), CollarCommand (25),
KeyCommand (18), BountyCommand (6), KidnapSetCommand (2), CaptivityDebugCommand (7),
InventorySubCommand (3), TestAnimSubCommand (2), MasterTestSubCommand (7), DebtSubCommand (8)
- Strip all section sign color codes, use .withStyle(ChatFormatting)
- 148 new keys in en_us.json (command.tiedup.*)
- Debug/dynamic strings intentionally kept as literal
2026-04-15 13:54:26 +02:00
NotEvil
70965c2dda
feat(C-01): i18n subcommands — 33 translatable keys
...
Phase 2: Migrate all Component.literal() in 5 subcommand files.
- BindCommands, GagCommands, BlindfoldCommands, CollarCommands, AccessoryCommands
- Strip \u00a7a section signs, use .withStyle(ChatFormatting.GREEN)
- Add 33 keys to en_us.json (command.tiedup.*)
- Shared error key: command.tiedup.error.no_state
2026-04-15 13:28:02 +02:00
NotEvil
0662739fe0
feat(C-01): i18n SystemMessageManager — 83 translatable keys
...
Phase 1: Core system message migration to Component.translatable().
- Replace getMessageTemplate() hardcoded strings with getTranslationKey() key derivation
- All send methods now use Component.translatable() with positional args
- Add 83 keys to en_us.json (msg.tiedup.system.*)
- Add sendTranslatable() convenience for external callers with string args
- Migrate 3 external getTemplate() callers (PlayerShockCollar, CellRegistryV2)
- Add resistance_suffix key for sendWithResistance()
2026-04-15 13:24:05 +02:00
NotEvil
199bf00aef
feat(D-01/E): BuiltInLockComponent for organic items (E2)
...
- New BuiltInLockComponent: blocksUnequip() returns true (permanent lock)
- ComponentType: add BUILT_IN_LOCK enum value
- 8 organic item JSONs updated (slime, vine, web, tape variants)
- DataDrivenBondageItem: add hasBuiltInLock() static helper
2026-04-15 03:11:15 +02:00
NotEvil
530b86a9a7
fix(D-01/B): hood missing MOUTH block + organic items lockable:false
...
- Hood: add MOUTH to blocked_regions — prevents double gag stacking
- 8 organic items (slime, vine, web, tape): set lockable:false at top
level for consistency with can_attach_padlock:false
2026-04-14 17:59:27 +02:00
NotEvil
258223bf68
feat(D-01/B): 47 data-driven item definitions + cleanup test files
...
16 binds: ropes, armbinder, dogbinder, chain, ribbon, slime, vine_seed,
web_bind, shibari, leather_straps, medical_straps, beam_cuffs,
duct_tape, straitjacket, wrap, latex_sack
19 gags: cloth_gag, ropes_gag, cleave_gag, ribbon_gag, ball_gag,
ball_gag_strap, tape_gag, wrap_gag, slime_gag, vine_gag, web_gag,
panel_gag, beam_panel_gag, chain_panel_gag, latex_gag, tube_gag,
bite_gag, sponge_gag, baguette_gag
2 blindfolds, 1 earplugs, 1 mittens
5 collars (classic, shock, shock_auto, gps, choke) with ownership component
3 combos (hood, medical_gag, ball_gag_3d)
All items config-driven via ResistanceComponent (id) and GaggingComponent
(material). Organic items have can_attach_padlock: false.
Removed 4 test files (test_component_gag, test_handcuffs, test_leg_cuffs).
2026-04-14 17:52:19 +02:00
NotEvil
dbacef66d5
feat(D-01): add test_component_gag.json demonstrating component system
...
JSON item using all 3 implemented components: lockable (lock_resistance: 200),
resistance (base: 80), and gagging (comprehension: 0.15, range: 8.0).
2026-04-14 02:03:50 +02:00
NotEvil
e17998933c
Add creator field and enriched tooltip for data-driven items
...
- Add optional "creator" JSON field to display author name in tooltip
- Show body regions, movement style, lock status, and escape difficulty
- Show pose priority and item ID in advanced mode (F3+H)
- Update ARTIST_GUIDE.md field reference and test JSON
2026-04-13 04:00:27 +02:00
NotEvil
f6466360b6
Clean repo for open source release
...
Remove build artifacts, dev tool configs, unused dependencies,
and third-party source dumps. Add proper README, update .gitignore,
clean up Makefile.
2026-04-12 00:51:22 +02:00