package com.tiedup.remake.items.bondage3d; import java.util.Set; /** * Configuration immutable for a 3D item. * Contains all parameters necessary for rendering. */ public record Model3DConfig( String objPath, // "tiedup:models/obj/ball_gag/model.obj" String texturePath, // "tiedup:models/obj/ball_gag/texture.png" (or null = use MTL) float posOffsetX, // Horizontal offset float posOffsetY, // Vertical offset (negative = lower) float posOffsetZ, // Depth offset (positive = forward) float scale, // Scale (1.0 = normal size) float rotOffsetX, // Additional X rotation float rotOffsetY, // Additional Y rotation float rotOffsetZ, // Additional Z rotation Set tintMaterials // Material names to apply color tint (e.g., "Ball") ) { /** Config without tinting */ public static Model3DConfig simple(String objPath, String texturePath) { return new Model3DConfig( objPath, texturePath, 0, 0, 0, 1.0f, 0, 0, 0, Set.of() ); } /** Config with position/rotation but no tinting */ public Model3DConfig( String objPath, String texturePath, float posOffsetX, float posOffsetY, float posOffsetZ, float scale, float rotOffsetX, float rotOffsetY, float rotOffsetZ ) { this( objPath, texturePath, posOffsetX, posOffsetY, posOffsetZ, scale, rotOffsetX, rotOffsetY, rotOffsetZ, Set.of() ); } /** Check if this item supports color tinting */ public boolean supportsTinting() { return tintMaterials != null && !tintMaterials.isEmpty(); } }