144 lines
6.9 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|