Decompiled source of AutoPickupIgnorer v1.0.5

AutoPickupIgnorer.dll

Decompiled 7 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("AutoPickupIgnorer")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AutoPickupIgnorer")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("dc3c126d-5fde-49f1-8712-20c5a6d97768")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace AutoPickupIgnorer;

[BepInPlugin("Pip.AutoPickupIgnorer", "Pip's Auto-pickup Ignorer", "1.0.5")]
[BepInProcess("valheim.exe")]
public class AutoPickupIgnorer : BaseUnityPlugin
{
	[HarmonyPatch(typeof(MessageHud), "Awake")]
	private class MessageHud_Awake_Patch
	{
		[HarmonyPostfix]
		private static void GetMessageHud(ref MessageHud ___m_instance)
		{
			_messageHud = ___m_instance;
		}
	}

	[HarmonyPatch(typeof(Player), "AutoPickup")]
	public static class Player_AutoPickup_Patch
	{
		[HarmonyTranspiler]
		private static IEnumerable<CodeInstruction> AutoPickupTranspiler(IEnumerable<CodeInstruction> instructions)
		{
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Expected O, but got Unknown
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Expected O, but got Unknown
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Expected O, but got Unknown
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Expected O, but got Unknown
			List<CodeInstruction> list = new List<CodeInstruction>(instructions);
			for (int i = 0; i < list.Count; i++)
			{
				if (list[i].opcode == OpCodes.Stloc_S && list[i].operand.GetType() == typeof(LocalBuilder) && ((LocalBuilder)list[i].operand).LocalIndex == 4)
				{
					object operand = list[i - 4].operand;
					List<CodeInstruction> list2 = new List<CodeInstruction>();
					list2.Add(new CodeInstruction(OpCodes.Ldloc_S, (object)4));
					list2.Add(new CodeInstruction(OpCodes.Ldfld, (object)AccessTools.Field(typeof(ItemDrop), "m_itemData")));
					list2.Add(new CodeInstruction(OpCodes.Callvirt, (object)AccessTools.Method(typeof(AutoPickupIgnorer), "IgnoreItem", new Type[1] { typeof(ItemData) }, (Type[])null)));
					list2.Add(new CodeInstruction(OpCodes.Brtrue, operand));
					List<CodeInstruction> collection = list2;
					list.InsertRange(i + 5, collection);
				}
			}
			return list.AsEnumerable();
		}
	}

	private const string modGUID = "Pip.AutoPickupIgnorer";

	private const string modName = "Pip's Auto-pickup Ignorer";

	private const string modVersion = "1.0.5";

	private readonly Harmony harmony = new Harmony("Pip.AutoPickupIgnorer");

	private static ConfigEntry<string> AutoPickupIgnoreList;

	private static ConfigEntry<KeyboardShortcut> ToggleBehaviorHotkey;

	private static List<string> _ignoreList;

	private static Common.PickupBehavior _currentPickupBehavior;

	private static MessageHud _messageHud;

	private void Awake()
	{
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		Game.isModded = true;
		AutoPickupIgnoreList = ((BaseUnityPlugin)this).Config.Bind<string>("General", "AutoPickupIgnoreList", "#Acorn, #Amber, #AmberPearl, #AncientSeed, #ArmorBronzeChest, #ArmorBronzeLegs, #ArmorCarapaceChest, #ArmorCarapaceLegs, #ArmorDress1, #ArmorDress10, #ArmorDress2, #ArmorDress3, #ArmorDress4, #ArmorDress5, #ArmorDress6, #ArmorDress7, #ArmorDress8, #ArmorDress9, #ArmorFenringChest, #ArmorFenringLegs, #ArmorIronChest, #ArmorIronLegs, #ArmorLeatherChest, #ArmorLeatherLegs, #ArmorMageChest, #ArmorMageLegs, #ArmorPaddedCuirass, #ArmorPaddedGreaves, #ArmorRagsChest, #ArmorRagsLegs, #ArmorRootChest, #ArmorRootLegs, #ArmorTrollLeatherChest, #ArmorTrollLeatherLegs, #ArmorTunic1, #ArmorTunic10, #ArmorTunic2, #ArmorTunic3, #ArmorTunic4, #ArmorTunic5, #ArmorTunic6, #ArmorTunic7, #ArmorTunic8, #ArmorTunic9, #ArmorWolfChest, #ArmorWolfLegs, #ArrowBronze, #ArrowCarapace, #ArrowFire, #ArrowFlint, #ArrowFrost, #ArrowIron, #ArrowNeedle, #ArrowObsidian, #ArrowPoison, #ArrowSilver, #ArrowWood, #AtgeirBlackmetal, #AtgeirBronze, #AtgeirHimminAfl, #AtgeirIron, #AxeBlackMetal, #AxeBronze, #AxeFlint, #AxeIron, #AxeJotunBane, #AxeStone, #BarberKit, #Barley, #BarleyFlour, #BarleyWine, #BarleyWineBase, #Battleaxe, #BattleaxeCrystal, #BeechSeeds, #BeltStrength, #Bilebag, #BirchSeeds, #BlackCore, #BlackMarble, #BlackMetal, #BlackMetalScrap, #BlackSoup, #Bloodbag, #BloodPudding, #Blueberries, #BoarJerky, #BoltBlackmetal, #BoltBone, #BoltCarapace, #BoltIron, #BombBile, #BombOoze, #BoneFragments, #Bow, #BowDraugrFang, #BowFineWood, #BowHuntsman, #BowSpineSnap, #Bread, #BreadDough, #Bronze, #BronzeNails, #BronzeScrap, #BugMeat, #CapeDeerHide, #CapeFeather, #CapeLinen, #CapeLox, #CapeOdin, #CapeTrollHide, #CapeWolf, #Carapace, #Carrot, #CarrotSeeds, #CarrotSoup, #Chain, #chest_hildir1, #chest_hildir2, #chest_hildir3, #ChickenEgg, #ChickenMeat, #Chitin, #Cloudberry, #Club, #Coal, #Coins, #CookedBugMeat, #CookedChickenMeat, #CookedDeerMeat, #CookedEgg, #CookedHareMeat, #CookedLoxMeat, #CookedMeat, #CookedWolfMeat, #Copper, #CopperOre, #CopperScrap, #CrossbowArbalest, #CryptKey, #Crystal, #Cultivator, #Dandelion, #DeerHide, #DeerMeat, #DeerStew, #Demister, #DragonEgg, #DragonTear, #DvergerArbalest, #DvergerArbalest_shoot, #DvergrKey, #DvergrKeyFragment, #DvergrNeedle, #Eitr, #ElderBark, #Entrails, #Eyescream, #Feathers, #FineWood, #FirCone, #FireworksRocket_Blue, #FireworksRocket_Cyan, #FireworksRocket_Green, #FireworksRocket_Purple, #FireworksRocket_Red, #FireworksRocket_White, #FireworksRocket_Yellow, #Fish1, #Fish10, #Fish11, #Fish12, #Fish2, #Fish3, #Fish4_cave, #Fish5, #Fish6, #Fish7, #Fish8, #Fish9, #FishAndBread, #FishAndBreadUncooked, #FishAnglerRaw, #FishCooked, #FishingBait, #FishingBaitAshlands, #FishingBaitCave, #FishingBaitDeepNorth, #FishingBaitForest, #FishingBaitMistlands, #FishingBaitOcean, #FishingBaitPlains, #FishingBaitSwamp, #FishingRod, #FishRaw, #FishWraps, #FistFenrirClaw, #Flametal, #FlametalOre, #Flax, #Flint, #FreezeGland, #GiantBloodSack, #GoblinTotem, #GreydwarfEye, #Guck, #Hammer, #HardAntler, #HareMeat, #HelmetBronze, #HelmetCarapace, #HelmetDrake, #HelmetDverger, #HelmetFenring, #HelmetFishingHat, #HelmetHat1, #HelmetHat10, #HelmetHat2, #HelmetHat3, #HelmetHat4, #HelmetHat5, #HelmetHat6, #HelmetHat7, #HelmetHat8, #HelmetHat9, #HelmetIron, #HelmetLeather, #HelmetMage, #HelmetMidsummerCrown, #HelmetOdin, #HelmetPadded, #HelmetRoot, #HelmetTrollLeather, #HelmetYule, #HildirKey_forestcrypt, #HildirKey_mountaincave, #HildirKey_plainsfortress, #Hoe, #Honey, #HoneyGlazedChicken, #HoneyGlazedChickenUncooked, #Iron, #IronNails, #IronOre, #Ironpit, #IronScrap, #JuteBlue, #JuteRed, #KnifeBlackMetal, #KnifeButcher, #KnifeChitin, #KnifeCopper, #KnifeFlint, #KnifeSilver, #KnifeSkollAndHati, #Lantern, #Larva, #LeatherScraps, #LinenThread, #LoxMeat, #LoxPelt, #LoxPie, #LoxPieUncooked, #MaceBronze, #MaceIron, #MaceNeedle, #MaceSilver, #MagicallyStuffedShroom, #MagicallyStuffedShroomUncooked, #Mandible, #MeadBaseEitrMinor, #MeadBaseFrostResist, #MeadBaseHealthMajor, #MeadBaseHealthMedium, #MeadBaseHealthMinor, #MeadBasePoisonResist, #MeadBaseStaminaLingering, #MeadBaseStaminaMedium, #MeadBaseStaminaMinor, #MeadBaseTasty, #MeadEitrMinor, #MeadFrostResist, #MeadHealthMajor, #MeadHealthMedium, #MeadHealthMinor, #MeadPoisonResist, #MeadStaminaLingering, #MeadStaminaMedium, #MeadStaminaMinor, #MeadTasty, #MeatPlatter, #MeatPlatterUncooked, #MechanicalSpring, #MinceMeatSauce, #MisthareSupreme, #MisthareSupremeUncooked, #Mushroom, #MushroomBlue, #MushroomJotunPuffs, #MushroomMagecap, #MushroomOmelette, #MushroomYellow, #NeckTail, #NeckTailGrilled, #Needle, #Obsidian, #Onion, #OnionSeeds, #OnionSoup, #Ooze, #PickaxeAntler, #PickaxeBlackMetal, #PickaxeBronze, #PickaxeIron, #PickaxeStone, #PineCone, #Pukeberries, #QueenBee, #QueenDrop, #QueensJam, #Raspberry, #RawMeat, #Resin, #Root, #RottenMeat, #RoundLog, #RoyalJelly, #Ruby, #SaddleLox, #Salad, #Sap, #Sausages, #ScaleHide, #SeekerAspic, #SerpentMeat, #SerpentMeatCooked, #SerpentScale, #SerpentStew, #SharpeningStone, #ShieldBanded, #ShieldBlackmetal, #ShieldBlackmetalTower, #ShieldBoneTower, #ShieldBronzeBuckler, #ShieldCarapace, #ShieldCarapaceBuckler, #ShieldIronBuckler, #ShieldIronSquare, #ShieldIronTower, #ShieldKnight, #ShieldSerpentscale, #ShieldSilver, #ShieldWood, #ShieldWoodTower, #ShocklateSmoothie, #Silver, #SilverNecklace, #SilverOre, #SledgeDemolisher, #SledgeIron, #SledgeStagbreaker, #Softtissue, #Sparkler, #SpearBronze, #SpearCarapace, #SpearChitin, #SpearElderbark, #SpearFlint, #SpearWolfFang, #StaffFireball, #StaffIceShards, #StaffShield, #StaffSkeleton, #Stone, #SurtlingCore, #SwordBlackmetal, #SwordBronze, #SwordIron, #SwordIronFire, #SwordMistwalker, #SwordSilver, #Tankard, #Tankard_dvergr, #TankardAnniversary, #TankardOdin, #Tar, #Thistle, #THSwordKrom, #Thunderstone, #Tin, #TinOre, #Torch, #TorchMist, #TrollHide, #TrophyAbomination, #TrophyBlob, #TrophyBoar, #TrophyBonemass, #TrophyCultist, #TrophyCultist_Hildir, #TrophyDeathsquito, #TrophyDeer, #TrophyDragonQueen, #TrophyDraugr, #TrophyDraugrElite, #TrophyDraugrFem, #TrophyDvergr, #TrophyEikthyr, #TrophyFenring, #TrophyForestTroll, #TrophyFrostTroll, #TrophyGjall, #TrophyGoblin, #TrophyGoblinBrute, #TrophyGoblinBruteBrosBrute, #TrophyGoblinBruteBrosShaman, #TrophyGoblinKing, #TrophyGoblinShaman, #TrophyGreydwarf, #TrophyGreydwarfBrute, #TrophyGreydwarfShaman, #TrophyGrowth, #TrophyHare, #TrophyHatchling, #TrophyLeech, #TrophyLox, #TrophyNeck, #TrophySeeker, #TrophySeekerBrute, #TrophySeekerQueen, #TrophySerpent, #TrophySGolem, #TrophySkeleton, #TrophySkeletonHildir, #TrophySkeletonPoison, #TrophySurtling, #TrophyTheElder, #TrophyTick, #TrophyUlv, #TrophyWolf, #TrophyWraith, #Turnip, #TurnipSeeds, #TurnipStew, #TurretBolt, #TurretBoltWood, #Wishbone, #Wisp, #WitheredBone, #WolfClaw, #WolfFang, #WolfHairBundle, #WolfJerky, #WolfMeat, #WolfMeatSkewer, #WolfPelt, #Wood, #YagluthDrop, #YggdrasilPorridge, #YggdrasilWood, #YmirRemains", "Comma-separated list of items to ignore auto-pickup. Remove # before item to add to ignore list.");
		ToggleBehaviorHotkey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("General", "BehaviorHotkey", new KeyboardShortcut((KeyCode)39, Array.Empty<KeyCode>()), "Hotkey to change pickup behavior between custom ignore, ignore all, and default behavior");
		_ignoreList = (from i in AutoPickupIgnoreList.Value.Split(new char[1] { ',' })
			select i.Trim() into i
			where !i.StartsWith("#")
			select i).ToList();
		harmony.PatchAll();
	}

	private void Update()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		KeyboardShortcut value = ToggleBehaviorHotkey.Value;
		if (((KeyboardShortcut)(ref value)).IsDown())
		{
			switch (_currentPickupBehavior)
			{
			case Common.PickupBehavior.Custom:
				_currentPickupBehavior = Common.PickupBehavior.IgnoreAll;
				_messageHud.ShowMessage((MessageType)1, "Ignoring all items", 0, (Sprite)null);
				break;
			case Common.PickupBehavior.IgnoreAll:
				_currentPickupBehavior = Common.PickupBehavior.Default;
				_messageHud.ShowMessage((MessageType)1, "Default pickup behavior", 0, (Sprite)null);
				break;
			case Common.PickupBehavior.Default:
				_currentPickupBehavior = Common.PickupBehavior.Custom;
				_messageHud.ShowMessage((MessageType)1, "Ignoring custom items", 0, (Sprite)null);
				break;
			default:
				_currentPickupBehavior = Common.PickupBehavior.Custom;
				_messageHud.ShowMessage((MessageType)1, "Ignoring custom items", 0, (Sprite)null);
				break;
			}
		}
	}

	public static bool IgnoreItem(ItemData itemData)
	{
		return _currentPickupBehavior == Common.PickupBehavior.IgnoreAll || (_currentPickupBehavior == Common.PickupBehavior.Custom && _ignoreList.Contains(((Object)itemData.m_dropPrefab).name));
	}
}
internal class Common
{
	public enum PickupBehavior
	{
		Custom,
		IgnoreAll,
		Default
	}

	public const string _defaultItemList = "#Acorn, #Amber, #AmberPearl, #AncientSeed, #ArmorBronzeChest, #ArmorBronzeLegs, #ArmorCarapaceChest, #ArmorCarapaceLegs, #ArmorDress1, #ArmorDress10, #ArmorDress2, #ArmorDress3, #ArmorDress4, #ArmorDress5, #ArmorDress6, #ArmorDress7, #ArmorDress8, #ArmorDress9, #ArmorFenringChest, #ArmorFenringLegs, #ArmorIronChest, #ArmorIronLegs, #ArmorLeatherChest, #ArmorLeatherLegs, #ArmorMageChest, #ArmorMageLegs, #ArmorPaddedCuirass, #ArmorPaddedGreaves, #ArmorRagsChest, #ArmorRagsLegs, #ArmorRootChest, #ArmorRootLegs, #ArmorTrollLeatherChest, #ArmorTrollLeatherLegs, #ArmorTunic1, #ArmorTunic10, #ArmorTunic2, #ArmorTunic3, #ArmorTunic4, #ArmorTunic5, #ArmorTunic6, #ArmorTunic7, #ArmorTunic8, #ArmorTunic9, #ArmorWolfChest, #ArmorWolfLegs, #ArrowBronze, #ArrowCarapace, #ArrowFire, #ArrowFlint, #ArrowFrost, #ArrowIron, #ArrowNeedle, #ArrowObsidian, #ArrowPoison, #ArrowSilver, #ArrowWood, #AtgeirBlackmetal, #AtgeirBronze, #AtgeirHimminAfl, #AtgeirIron, #AxeBlackMetal, #AxeBronze, #AxeFlint, #AxeIron, #AxeJotunBane, #AxeStone, #BarberKit, #Barley, #BarleyFlour, #BarleyWine, #BarleyWineBase, #Battleaxe, #BattleaxeCrystal, #BeechSeeds, #BeltStrength, #Bilebag, #BirchSeeds, #BlackCore, #BlackMarble, #BlackMetal, #BlackMetalScrap, #BlackSoup, #Bloodbag, #BloodPudding, #Blueberries, #BoarJerky, #BoltBlackmetal, #BoltBone, #BoltCarapace, #BoltIron, #BombBile, #BombOoze, #BoneFragments, #Bow, #BowDraugrFang, #BowFineWood, #BowHuntsman, #BowSpineSnap, #Bread, #BreadDough, #Bronze, #BronzeNails, #BronzeScrap, #BugMeat, #CapeDeerHide, #CapeFeather, #CapeLinen, #CapeLox, #CapeOdin, #CapeTrollHide, #CapeWolf, #Carapace, #Carrot, #CarrotSeeds, #CarrotSoup, #Chain, #chest_hildir1, #chest_hildir2, #chest_hildir3, #ChickenEgg, #ChickenMeat, #Chitin, #Cloudberry, #Club, #Coal, #Coins, #CookedBugMeat, #CookedChickenMeat, #CookedDeerMeat, #CookedEgg, #CookedHareMeat, #CookedLoxMeat, #CookedMeat, #CookedWolfMeat, #Copper, #CopperOre, #CopperScrap, #CrossbowArbalest, #CryptKey, #Crystal, #Cultivator, #Dandelion, #DeerHide, #DeerMeat, #DeerStew, #Demister, #DragonEgg, #DragonTear, #DvergerArbalest, #DvergerArbalest_shoot, #DvergrKey, #DvergrKeyFragment, #DvergrNeedle, #Eitr, #ElderBark, #Entrails, #Eyescream, #Feathers, #FineWood, #FirCone, #FireworksRocket_Blue, #FireworksRocket_Cyan, #FireworksRocket_Green, #FireworksRocket_Purple, #FireworksRocket_Red, #FireworksRocket_White, #FireworksRocket_Yellow, #Fish1, #Fish10, #Fish11, #Fish12, #Fish2, #Fish3, #Fish4_cave, #Fish5, #Fish6, #Fish7, #Fish8, #Fish9, #FishAndBread, #FishAndBreadUncooked, #FishAnglerRaw, #FishCooked, #FishingBait, #FishingBaitAshlands, #FishingBaitCave, #FishingBaitDeepNorth, #FishingBaitForest, #FishingBaitMistlands, #FishingBaitOcean, #FishingBaitPlains, #FishingBaitSwamp, #FishingRod, #FishRaw, #FishWraps, #FistFenrirClaw, #Flametal, #FlametalOre, #Flax, #Flint, #FreezeGland, #GiantBloodSack, #GoblinTotem, #GreydwarfEye, #Guck, #Hammer, #HardAntler, #HareMeat, #HelmetBronze, #HelmetCarapace, #HelmetDrake, #HelmetDverger, #HelmetFenring, #HelmetFishingHat, #HelmetHat1, #HelmetHat10, #HelmetHat2, #HelmetHat3, #HelmetHat4, #HelmetHat5, #HelmetHat6, #HelmetHat7, #HelmetHat8, #HelmetHat9, #HelmetIron, #HelmetLeather, #HelmetMage, #HelmetMidsummerCrown, #HelmetOdin, #HelmetPadded, #HelmetRoot, #HelmetTrollLeather, #HelmetYule, #HildirKey_forestcrypt, #HildirKey_mountaincave, #HildirKey_plainsfortress, #Hoe, #Honey, #HoneyGlazedChicken, #HoneyGlazedChickenUncooked, #Iron, #IronNails, #IronOre, #Ironpit, #IronScrap, #JuteBlue, #JuteRed, #KnifeBlackMetal, #KnifeButcher, #KnifeChitin, #KnifeCopper, #KnifeFlint, #KnifeSilver, #KnifeSkollAndHati, #Lantern, #Larva, #LeatherScraps, #LinenThread, #LoxMeat, #LoxPelt, #LoxPie, #LoxPieUncooked, #MaceBronze, #MaceIron, #MaceNeedle, #MaceSilver, #MagicallyStuffedShroom, #MagicallyStuffedShroomUncooked, #Mandible, #MeadBaseEitrMinor, #MeadBaseFrostResist, #MeadBaseHealthMajor, #MeadBaseHealthMedium, #MeadBaseHealthMinor, #MeadBasePoisonResist, #MeadBaseStaminaLingering, #MeadBaseStaminaMedium, #MeadBaseStaminaMinor, #MeadBaseTasty, #MeadEitrMinor, #MeadFrostResist, #MeadHealthMajor, #MeadHealthMedium, #MeadHealthMinor, #MeadPoisonResist, #MeadStaminaLingering, #MeadStaminaMedium, #MeadStaminaMinor, #MeadTasty, #MeatPlatter, #MeatPlatterUncooked, #MechanicalSpring, #MinceMeatSauce, #MisthareSupreme, #MisthareSupremeUncooked, #Mushroom, #MushroomBlue, #MushroomJotunPuffs, #MushroomMagecap, #MushroomOmelette, #MushroomYellow, #NeckTail, #NeckTailGrilled, #Needle, #Obsidian, #Onion, #OnionSeeds, #OnionSoup, #Ooze, #PickaxeAntler, #PickaxeBlackMetal, #PickaxeBronze, #PickaxeIron, #PickaxeStone, #PineCone, #Pukeberries, #QueenBee, #QueenDrop, #QueensJam, #Raspberry, #RawMeat, #Resin, #Root, #RottenMeat, #RoundLog, #RoyalJelly, #Ruby, #SaddleLox, #Salad, #Sap, #Sausages, #ScaleHide, #SeekerAspic, #SerpentMeat, #SerpentMeatCooked, #SerpentScale, #SerpentStew, #SharpeningStone, #ShieldBanded, #ShieldBlackmetal, #ShieldBlackmetalTower, #ShieldBoneTower, #ShieldBronzeBuckler, #ShieldCarapace, #ShieldCarapaceBuckler, #ShieldIronBuckler, #ShieldIronSquare, #ShieldIronTower, #ShieldKnight, #ShieldSerpentscale, #ShieldSilver, #ShieldWood, #ShieldWoodTower, #ShocklateSmoothie, #Silver, #SilverNecklace, #SilverOre, #SledgeDemolisher, #SledgeIron, #SledgeStagbreaker, #Softtissue, #Sparkler, #SpearBronze, #SpearCarapace, #SpearChitin, #SpearElderbark, #SpearFlint, #SpearWolfFang, #StaffFireball, #StaffIceShards, #StaffShield, #StaffSkeleton, #Stone, #SurtlingCore, #SwordBlackmetal, #SwordBronze, #SwordIron, #SwordIronFire, #SwordMistwalker, #SwordSilver, #Tankard, #Tankard_dvergr, #TankardAnniversary, #TankardOdin, #Tar, #Thistle, #THSwordKrom, #Thunderstone, #Tin, #TinOre, #Torch, #TorchMist, #TrollHide, #TrophyAbomination, #TrophyBlob, #TrophyBoar, #TrophyBonemass, #TrophyCultist, #TrophyCultist_Hildir, #TrophyDeathsquito, #TrophyDeer, #TrophyDragonQueen, #TrophyDraugr, #TrophyDraugrElite, #TrophyDraugrFem, #TrophyDvergr, #TrophyEikthyr, #TrophyFenring, #TrophyForestTroll, #TrophyFrostTroll, #TrophyGjall, #TrophyGoblin, #TrophyGoblinBrute, #TrophyGoblinBruteBrosBrute, #TrophyGoblinBruteBrosShaman, #TrophyGoblinKing, #TrophyGoblinShaman, #TrophyGreydwarf, #TrophyGreydwarfBrute, #TrophyGreydwarfShaman, #TrophyGrowth, #TrophyHare, #TrophyHatchling, #TrophyLeech, #TrophyLox, #TrophyNeck, #TrophySeeker, #TrophySeekerBrute, #TrophySeekerQueen, #TrophySerpent, #TrophySGolem, #TrophySkeleton, #TrophySkeletonHildir, #TrophySkeletonPoison, #TrophySurtling, #TrophyTheElder, #TrophyTick, #TrophyUlv, #TrophyWolf, #TrophyWraith, #Turnip, #TurnipSeeds, #TurnipStew, #TurretBolt, #TurretBoltWood, #Wishbone, #Wisp, #WitheredBone, #WolfClaw, #WolfFang, #WolfHairBundle, #WolfJerky, #WolfMeat, #WolfMeatSkewer, #WolfPelt, #Wood, #YagluthDrop, #YggdrasilPorridge, #YggdrasilWood, #YmirRemains";
}