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.
This commit is contained in:
notevil
2026-04-22 03:16:14 +02:00
parent bdbd429bdf
commit 1cef57a472
23 changed files with 508 additions and 45 deletions

View File

@@ -23,7 +23,7 @@ import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.logging.log4j.Logger;
import org.slf4j.Logger;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;

View File

@@ -0,0 +1,29 @@
/*
* Derived from Epic Fight (https://github.com/Epic-Fight/epicfight)
* by the Epic Fight Team, licensed under GPLv3.
* Modifications © 2026 TiedUp! Remake Contributors, distributed under GPLv3.
*/
package com.tiedup.remake.rig.anim.client.property;
import com.google.gson.JsonElement;
import net.minecraft.core.particles.SimpleParticleType;
import net.minecraft.world.phys.Vec3;
/**
* Stub RIG Phase 0 — combat weapon particle trail. Pas utilisé dans TiedUp
* (bondage, pas d'armes actives), mais on garde l'API typée pour JSON compat.
* {@code deserialize} retourne toujours un trail neutre non-playable, donc
* le block dans StaticAnimation est court-circuité (voir {@link #playable()}).
*/
public record TrailInfo(String joint, SimpleParticleType particle, boolean playable) {
public static TrailInfo deserialize(JsonElement element) {
return new TrailInfo("", null, false);
}
public Vec3 start() { return Vec3.ZERO; }
public Vec3 end() { return Vec3.ZERO; }
public float startTime() { return 0.0F; }
public float endTime() { return 0.0F; }
}

View File

@@ -6,6 +6,10 @@
package com.tiedup.remake.rig.anim.types;
import net.minecraft.world.phys.Vec3;
import com.tiedup.remake.rig.anim.AnimationVariables;
import com.tiedup.remake.rig.anim.AnimationVariables.IndependentAnimationVariableKey;
import com.tiedup.remake.rig.anim.property.AnimationProperty.ActionAnimationProperty;
import com.tiedup.remake.rig.armature.Armature;
import com.tiedup.remake.rig.asset.AssetAccessor;
@@ -19,6 +23,13 @@ import com.tiedup.remake.rig.asset.AssetAccessor;
*/
public class ActionAnimation extends MainFrameAnimation {
// Variables indépendantes propagées à MoveCoordFunctions (position de départ
// en coord monde + produit scalaire lookVec initial pour lerp anim→world).
public static final IndependentAnimationVariableKey<Vec3> BEGINNING_LOCATION =
AnimationVariables.independent((animator) -> animator.getEntityPatch().getOriginal().position(), true);
public static final IndependentAnimationVariableKey<Float> INITIAL_LOOK_VEC_DOT =
AnimationVariables.independent((animator) -> 1.0F, true);
public ActionAnimation(float transitionTime, boolean isRepeat, String registryName, AssetAccessor<? extends Armature> armature) {
super(transitionTime, isRepeat, registryName, armature);
}
@@ -34,4 +45,18 @@ public class ActionAnimation extends MainFrameAnimation {
public <V> ActionAnimation addProperty(ActionAnimationProperty<V> property, V value) {
return this;
}
/**
* Stub — LinkAnimation.modifyPose appelle ça pour aligner la root joint
* en espace monde pendant la transition. No-op en TiedUp.
*/
public void correctRootJoint(
com.tiedup.remake.rig.anim.types.LinkAnimation linkAnimation,
com.tiedup.remake.rig.anim.Pose pose,
com.tiedup.remake.rig.patch.LivingEntityPatch<?> entitypatch,
float time,
float partialTicks
) {
// no-op
}
}

View File

@@ -9,6 +9,8 @@ package com.tiedup.remake.rig.anim.types;
import java.util.Collections;
import java.util.List;
import net.minecraft.world.InteractionHand;
import com.tiedup.remake.rig.armature.Armature;
import com.tiedup.remake.rig.asset.AssetAccessor;
@@ -44,13 +46,34 @@ public class AttackAnimation extends ActionAnimation {
super(isRepeat, registryName, armature);
}
/**
* Stub — MoveCoordFunctions appelle ça pour calculer la reach mid-anim.
* On retourne toujours une Phase neutre (mainHand, pas de colliders),
* donc le reach retombe sur {@code entitypatch.getReach(MAIN_HAND)}.
*/
public Phase getPhaseByTime(float elapsedTime) {
return new Phase();
}
/**
* Phase d'attaque. Stub pour satisfaire {@code phase.getColliders()}
* en JsonAssetLoader.
* en JsonAssetLoader + {@code phase.hand} en MoveCoordFunctions.
*/
public static class Phase {
public Object[] getColliders() {
return new Object[0];
public final InteractionHand hand = InteractionHand.MAIN_HAND;
public JointColliderPair[] getColliders() {
return new JointColliderPair[0];
}
}
/**
* Stub — (Joint, Collider) pair pour les hitboxes combat. Non utilisé
* en TiedUp, juste un placeholder typé pour que JsonAssetLoader:592 compile.
*/
public static class JointColliderPair {
public com.tiedup.remake.rig.armature.Joint getFirst() {
return null;
}
}
}

View File

@@ -116,6 +116,11 @@ public class StaticAnimation extends DynamicAnimation implements InverseKinemati
this.filehash = getFileHash(this.resourceLocation);
}
/* Resourcepack animations — transitionTime par défaut */
public StaticAnimation(boolean isRepeat, String path, AssetAccessor<? extends Armature> armature) {
this(TiedUpRigConstants.GENERAL_ANIMATION_TRANSITION_TIME, isRepeat, path, armature);
}
/* Resourcepack animations */
public StaticAnimation(float transitionTime, boolean isRepeat, String path, AssetAccessor<? extends Armature> armature) {
super(transitionTime, isRepeat);