🔐 Mecanismos de Bloqueo de Recetas

Hytale implementa 3 sistemas de bloqueo para controlar el acceso a recetas:

Mecanismo Campo Descripción
🔐 Conocimiento knowledgeRequired La receta debe ser aprendida antes de poder usarla
🧠 Memorias requiredMemoriesLevel Requiere cierto nivel de "memorias" del jugador (1 = siempre disponible)
⚒️ Tier Bench requiredTierLevel Requiere que la mesa de crafteo sea de cierto nivel/tier

🔐 Mecanismo 1: Knowledge Required

Cómo Funciona

  • Si knowledgeRequired = true, el jugador debe aprender la receta primero
  • Las recetas conocidas se almacenan en PlayerConfigData.knownRecipes
  • Solo aplica para mesas tipo Crafting o DiagramCrafting

Cómo se Aprenden Recetas

// LearnRecipeInteraction.java - línea 76
CraftingPlugin.learnRecipe(ref, itemId, commandBuffer);

// CraftingPlugin.java - línea 230-240
public static boolean learnRecipe(Ref<EntityStore> ref, String recipeId, ...) {
    HashSet<String> knownRecipes = new HashSet<>(playerConfigData.getKnownRecipes());
    if (knownRecipes.add(recipeId)) {
        playerConfigData.setKnownRecipes(knownRecipes);
        CraftingPlugin.sendKnownRecipes(ref, componentAccessor);
        return true;
    }
    return false;
}

Verificación al Craftear

// CraftingManager.java - línea 295
if (recipe.isKnowledgeRequired() && 
    !playerConfigData.getKnownRecipes().contains(primaryOutputItemId)) {
    // Receta bloqueada - no conocida
}

🧠 Mecanismo 2: Required Memories Level

Cómo Funciona

  • requiredMemoriesLevel indica el nivel mínimo de "memorias"
  • Nivel 1 = Siempre disponible para todos los jugadores
  • Niveles superiores requieren progresión del jugador en el juego

Configuración en JSON

{
  "Id": "Advanced_Sword_Recipe",
  "CraftingRecipe": {
    "RequiredMemoriesLevel": 3,
    // ... resto de la configuración
  }
}
📝
Documentación del Código
"The level of Memories starts from 1, meaning a recipe with a RequiredMemoriesLevel set at 1 will always be available to players."

⚒️ Mecanismo 3: Required Tier Level

Cómo Funciona

  • requiredTierLevel en BenchRequirement especifica el nivel mínimo
  • Cada mesa de crafteo tiene un tierLevel actual
  • Las mesas pueden mejorarse (upgrade) para desbloquear más recetas

Verificación

// CraftingRecipe.java - línea 181-190
public boolean isRestrictedByBenchTierLevel(String benchId, int tierLevel) {
    for (BenchRequirement b : this.benchRequirement) {
        if (!benchId.equals(b.id) || tierLevel >= b.requiredTierLevel) continue;
        return true; // Bloqueada por nivel de bench
    }
    return false;
}

Configuración en JSON

{
  "BenchRequirement": [
    {
      "Type": "Crafting",
      "Id": "Anvil",
      "RequiredTierLevel": 2,
      "Categories": ["Weapons", "Armor"]
    }
  ]
}

🪑 Tipos de Mesas de Crafteo (BenchType)

Tipo Descripción Soporta Knowledge Required
Crafting Mesa de crafteo estándar ✅ Sí
DiagramCrafting Crafteo con diagramas ✅ Sí
Structural Crafteo estructural ❌ No
Fieldcraft Crafteo de campo (sin delay) ❌ No

💻 Comandos Disponibles

El sistema incluye comandos para gestionar recetas (definidos en RecipeCommand.java):

// Comandos de servidor
/recipe learn <itemId>     // Aprende una receta
/recipe forget <itemId>    // Olvida una receta
/recipe list               // Lista recetas conocidas

📁 Archivos Clave

  • 📄 CraftingRecipe.java Definición de recetas
  • 📄 CraftingPlugin.java Plugin principal
  • 📄 LearnRecipeInteraction.java Interacción para aprender
  • 📄 BenchRecipeRegistry.java Registro por bench
  • 📄 CraftingManager.java Gestor de crafteo
  • 📄 PlayerConfigData.java Datos del jugador