Add runtime furnace recipe registration support

This commit is contained in:
Jacobwasbeast
2026-03-07 02:55:24 -06:00
parent 02118c8055
commit 4119522cde
5 changed files with 125 additions and 1 deletions

View File

@@ -2,6 +2,7 @@
#include "IdRegistry.h"
#include "CreativeInventory.h"
#include "GameObjectFactory.h"
#include "FurnaceRecipeRegistry.h"
#include "ModStrings.h"
#include "LogUtil.h"
#include <Windows.h>
@@ -18,6 +19,19 @@ static std::wstring Utf8ToWide(const char* utf8)
return result;
}
static int ResolveRecipeId(const char* namespacedId, bool preferItem)
{
if (!namespacedId || !namespacedId[0]) return -1;
int itemId = IdRegistry::Instance().GetNumericId(IdRegistry::Type::Item, namespacedId);
int blockId = IdRegistry::Instance().GetNumericId(IdRegistry::Type::Block, namespacedId);
if (preferItem)
return (itemId >= 0) ? itemId : blockId;
return (blockId >= 0) ? blockId : itemId;
}
extern "C"
{
@@ -147,7 +161,29 @@ void native_add_furnace_recipe(
const char* outputId,
float xp)
{
LogUtil::Log("[WeaveLoader] Added furnace recipe: %s -> %s (%.1f xp)", inputId, outputId, xp);
int inputNumeric = ResolveRecipeId(inputId, false);
int outputNumeric = ResolveRecipeId(outputId, true);
if (inputNumeric < 0)
{
LogUtil::Log("[WeaveLoader] Failed furnace recipe: unknown input '%s'", inputId ? inputId : "(null)");
return;
}
if (outputNumeric < 0)
{
LogUtil::Log("[WeaveLoader] Failed furnace recipe: unknown output '%s'", outputId ? outputId : "(null)");
return;
}
if (!FurnaceRecipeRegistry::AddRecipe(inputNumeric, outputNumeric, xp))
{
LogUtil::Log("[WeaveLoader] Failed furnace recipe: %s -> %s (%.1f xp)", inputId, outputId, xp);
return;
}
LogUtil::Log("[WeaveLoader] Added furnace recipe: %s[%d] -> %s[%d] (%.1f xp)",
inputId, inputNumeric, outputId, outputNumeric, xp);
}
void native_log(const char* message, int level)