public static bool Prefix(StardewValley.Object __instance, Item dropInItem, bool probe, Farmer who, ref bool __result) { if (__instance.name == "Furnace") { if (who.IsLocalPlayer && __instance.GetTallyOfObject(who, 382, false) > 0 && __instance.heldObject.Value == null && dropInItem is IDGAItem ditem && ditem.FullId == ItemIds.MythiciteOre && dropInItem.Stack >= 5) { __instance.heldObject.Value = (StardewValley.Object)Mod.dga.SpawnDGAItem(ItemIds.MythiciteBar); __instance.minutesUntilReady.Value = 720; if (probe) { __result = true; } else { who.currentLocation.playSound("furnace"); __instance.initializeLightSource(__instance.tileLocation); __instance.showNextIndex.Value = true; // TODO: Don't be lazy and actually do this when Game1.multiplayer is public /*Game1.multiplayer.broadcastSprites(who.currentLocation, new TemporaryAnimatedSprite(30, this.tileLocation.Value * 64f + new Vector2(0f, -16f), Color.White, 4, flipped: false, 50f, 10, 64, (this.tileLocation.Y + 1f) * 64f / 10000f + 0.0001f) * { * alphaFade = 0.005f * });*/ __instance.ConsumeInventoryItem(who, 382, 1); dropInItem.Stack -= 5; if (dropInItem.Stack <= 0) { __result = true; } __result = false; return(false); } return(false); } } return(true); }
public static bool UpdateCharcoalKilnInput(ref StardewObject __instance, ref bool __result, ref Item dropInItem, ref bool probe, ref Farmer who) { try { if (__instance.name.Equals("Charcoal Kiln")) { if (__instance.isTemporarilyInvisible) { __result = false; return(false); } if (dropInItem is not StardewObject) { __result = false; return(false); } StardewObject dropIn = dropInItem as StardewObject; if (dropInItem is Wallpaper) { __result = false; return(false); } if (__instance.heldObject.Value != null) { __result = false; return(false); } if (dropIn != null && dropIn.bigCraftable.Value) { __result = false; return(false); } if (__instance.bigCraftable.Value && !probe && dropIn != null && __instance.heldObject.Value == null) { __instance.scale.X = 5f; } if (probe && __instance.MinutesUntilReady > 0) { __result = false; return(false); } int consumeCount = -1; switch (dropIn.ParentSheetIndex) { case DriftwoodID: if (mod.Config.DriftwoodMultiplier > 0 && dropIn.Stack >= CountWithMultiplier(mod.Config.CharcoalKilnWoodNeeded, mod.Config.DriftwoodMultiplier)) { consumeCount = CountWithMultiplier(mod.Config.CharcoalKilnWoodNeeded, mod.Config.DriftwoodMultiplier); } break; case WoodID: if (dropIn.Stack >= mod.Config.CharcoalKilnWoodNeeded) { consumeCount = mod.Config.CharcoalKilnWoodNeeded; } break; case HardwoodID: if (mod.Config.HardwoodMultiplier > 0 && dropIn.Stack >= CountWithMultiplier(mod.Config.CharcoalKilnWoodNeeded, mod.Config.HardwoodMultiplier)) { consumeCount = CountWithMultiplier(mod.Config.CharcoalKilnWoodNeeded, mod.Config.HardwoodMultiplier); } break; default: break; } if (who.IsLocalPlayer && consumeCount == -1) { if (!probe && who.IsLocalPlayer && StardewObject.autoLoadChest == null) { Game1.showRedMessage(Game1.content.LoadString("Strings\\StringsFromCSFiles:Object.cs.12783")); } __result = false; return(false); } if (__instance.heldObject.Value == null && consumeCount != -1) { if (!probe) { __instance.ConsumeInventoryItem(who, dropIn, consumeCount); who.currentLocation.playSound("openBox", NetAudio.SoundContext.Default); DelayedAction.playSoundAfterDelay("fireball", 50, null, -1); __instance.showNextIndex.Value = true; var multiplayer = (Multiplayer)AccessTools.Field(typeof(Game1), "multiplayer").GetValue(null); var tempSprite = new TemporaryAnimatedSprite(27, (__instance.TileLocation * 64f) + new Vector2(-16f, -128f), Color.White, 4, false, 50f, 10, 64, ((__instance.TileLocation.Y + 1f) * 64f / 10000f) + 0.0001f, -1, 0) { alphaFade = 0.005f }; multiplayer.broadcastSprites(who.currentLocation, new TemporaryAnimatedSprite[] { tempSprite }); __instance.heldObject.Value = new StardewObject(CoalID, 1, false, -1, 0); __instance.MinutesUntilReady = mod.Config.CharcoalKilnTimeNeeded; } else { __instance.heldObject.Value = new StardewObject(); __result = true; return(false); } } __result = false; return(false); } else { return(true); } } catch (Exception e) { mod.ErrorLog("There was an exception in a patch", e); return(true); } }