Files
7d2dXG/Mods/zzz_REBIRTH__Utils/Harmony/Harmony_XUiC_RecipeStack.cs
Nathaniel Cosford 062dfab2cd Patched
2025-05-30 01:04:40 +09:30

144 lines
6.9 KiB
C#

namespace Harmony.XUiC_RecipeStackPatches
{
[HarmonyPatch(typeof(TileEntityWorkstation))]
[HarmonyPatch("HandleRecipeQueue")]
public class UpdatePatch
{
public static MethodInfo cycleRecipeQueue = AccessTools.Method(typeof(TileEntityWorkstation), "cycleRecipeQueue", new Type[] { });
public static MethodInfo hasRecipeInQueue = AccessTools.Method(typeof(TileEntityWorkstation), "hasRecipeInQueue", new Type[] { });
public static bool Prefix(TileEntityWorkstation __instance, float _timePassed,
bool ___bUserAccessing,
ref RecipeQueueItem[] ___queue,
bool[] ___isModuleUsed,
bool ___isBurning,
ItemStack[] ___output
)
{
if (___bUserAccessing)
{
return false;
}
if (___queue.Length == 0)
{
return false;
}
if (___isModuleUsed[3] && !___isBurning)
{
return false;
}
RecipeQueueItem recipeQueueItem = ___queue[___queue.Length - 1];
if (recipeQueueItem == null)
{
return false;
}
//Log.Out("XUiC_RecipeStackPatches-HandleRecipeQueue 1");
if (recipeQueueItem.CraftingTimeLeft >= 0f)
{
//Log.Out("XUiC_RecipeStackPatches-HandleRecipeQueue 2");
recipeQueueItem.CraftingTimeLeft -= _timePassed;
}
while (recipeQueueItem.CraftingTimeLeft < 0f && (bool)hasRecipeInQueue.Invoke(__instance, new object[] { }))
{
//Log.Out("XUiC_RecipeStackPatches-HandleRecipeQueue 3");
if (recipeQueueItem.Multiplier > 0)
{
//Log.Out("XUiC_RecipeStackPatches-HandleRecipeQueue 4");
ItemValue itemValue = new ItemValue(recipeQueueItem.Recipe.itemValueType, false);
if (ItemClass.list[recipeQueueItem.Recipe.itemValueType] != null && ItemClass.list[recipeQueueItem.Recipe.itemValueType].HasQuality)
{
//Log.Out("XUiC_RecipeStackPatches-HandleRecipeQueue 5");
itemValue = new ItemValue(recipeQueueItem.Recipe.itemValueType, (int)recipeQueueItem.Quality, (int)recipeQueueItem.Quality, false, null, 1f);
}
if (ItemStack.AddToItemStackArray(___output, new ItemStack(itemValue, recipeQueueItem.Recipe.count), -1) == -1)
{
//Log.Out("XUiC_RecipeStackPatches-HandleRecipeQueue 6");
return false;
}
GameSparksCollector.IncrementCounter(GameSparksCollector.GSDataKey.CraftedItems, itemValue.ItemClass.Name, 1, true, GameSparksCollector.GSDataCollection.SessionUpdates);
RecipeQueueItem recipeQueueItem2 = recipeQueueItem;
recipeQueueItem2.Multiplier -= 1;
recipeQueueItem.CraftingTimeLeft += recipeQueueItem.OneItemCraftTime;
// ADD OUTPUT ITEMS TO WORKSTATION
//Log.Out("XUiC_RecipeStackPatches-HandleRecipeQueue 7");
RebirthUtilities.AddOutputItems(recipeQueueItem.Recipe, ___output);
}
if (recipeQueueItem.Multiplier <= 0)
{
//Log.Out("XUiC_RecipeStackPatches-HandleRecipeQueue 8");
float craftingTimeLeft = recipeQueueItem.CraftingTimeLeft;
cycleRecipeQueue.Invoke(__instance, new object[] { });
recipeQueueItem = ___queue[___queue.Length - 1];
recipeQueueItem.CraftingTimeLeft += ((craftingTimeLeft < 0f) ? craftingTimeLeft : 0f);
}
}
//Log.Out("XUiC_RecipeStackPatches-HandleRecipeQueue END");
return false;
}
}
[HarmonyPatch(typeof(XUiC_RecipeStack))]
[HarmonyPatch("outputStack")]
public class outputStackPatch
{
public static bool Prefix(XUiC_RecipeStack __instance, ref bool __result,
Recipe ___recipe,
ref ItemValue ___originalItem,
ref ItemValue ___outputItemValue,
int ___outputQuality,
int ___startingEntityId,
ref int ___amountToRepair,
bool ___playSound,
XUiWindowGroup ___windowGroup,
int ___recipeCount,
ref bool ___isCrafting,
ref float ___craftingTimeLeft,
float ___oneItemCraftTime,
ref bool ___isInventoryFull,
ref XUiController ___lockIcon,
ref XUiController ___overlay,
ref XUiController ___itemIcon,
ref XUiController ___timer,
ref XUiController ___count,
ref XUiController ___cancel,
bool ___isOver,
XUiController ___background,
float ___totalCraftTimeLeft
)
{
__result = RebirthUtilities.outputStack(__instance,
___recipe,
ref ___originalItem,
ref ___outputItemValue,
___outputQuality,
___startingEntityId,
ref ___amountToRepair,
___playSound,
___windowGroup,
___recipeCount,
ref ___isCrafting,
ref ___craftingTimeLeft,
___oneItemCraftTime,
ref ___isInventoryFull,
ref ___lockIcon,
ref ___overlay,
ref ___itemIcon,
ref ___timer,
ref ___count,
ref ___cancel,
___isOver,
___background,
___totalCraftTimeLeft);
return false;
}
}
}