Upload from upload_mods.ps1
This commit is contained in:
115
Harmony/Inactive/Harmony_EntityLootContainer.cs
Normal file
115
Harmony/Inactive/Harmony_EntityLootContainer.cs
Normal file
@@ -0,0 +1,115 @@
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Harmony.EntityLootContainerPatches
|
||||
{
|
||||
/*[HarmonyPatch(typeof(EntityLootContainer))]
|
||||
[HarmonyPatch("OnUpdateEntity")]
|
||||
public class OnUpdateEntityPatch
|
||||
{
|
||||
[HarmonyTranspiler]
|
||||
public static IEnumerable<CodeInstruction> OnUpdateEntity(IEnumerable<CodeInstruction> instructions)
|
||||
{
|
||||
var codes = new List<CodeInstruction>(instructions);
|
||||
|
||||
for (int i = 0; i < codes.Count; i++)
|
||||
{
|
||||
if ((codes[i].opcode == OpCodes.Ldarg_0) && (codes[i+2].opcode == OpCodes.Ldc_I4_1))
|
||||
{
|
||||
codes[i+2].opcode = OpCodes.Ldc_I4_0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return codes;
|
||||
}
|
||||
}*/
|
||||
|
||||
[HarmonyPatch(typeof(EntityLootContainer))]
|
||||
[HarmonyPatch("OnUpdateEntity")]
|
||||
public class OnUpdateEntityPatch
|
||||
{
|
||||
public static bool Prefix(EntityLootContainer __instance)
|
||||
{
|
||||
Log.Out("EntityLootContainerPatches-OnUpdateEntity START");
|
||||
bool isInWater = __instance.isInWater;
|
||||
if (!__instance.isEntityStatic())
|
||||
__instance.TickInWater();
|
||||
if (__instance.isEntityRemote)
|
||||
return false;
|
||||
if (__instance.isInWater)
|
||||
{
|
||||
if (!isInWater && !__instance.firstUpdate && (double)__instance.fallDistance > 1.0)
|
||||
__instance.PlayOneShot("waterfallinginto");
|
||||
__instance.fallDistance = 0.0f;
|
||||
}
|
||||
if (!__instance.RootMotion && !__instance.IsDead() && __instance.CanBePushed())
|
||||
{
|
||||
List<Entity> entitiesInBounds = __instance.world.GetEntitiesInBounds(__instance, BoundsUtils.ExpandBounds(__instance.boundingBox, 0.2f, __instance.GetPushBoundsVertical(), 0.2f));
|
||||
if (entitiesInBounds != null && entitiesInBounds.Count > 0)
|
||||
{
|
||||
for (int index = 0; index < entitiesInBounds.Count; ++index)
|
||||
__instance.OnPushEntity(entitiesInBounds[index]);
|
||||
}
|
||||
}
|
||||
__instance.firstUpdate = false;
|
||||
|
||||
if (!__instance.bMeshCreated)
|
||||
__instance.createMesh();
|
||||
if (__instance.itemWorldData != null)
|
||||
__instance.itemClass.OnDroppedUpdate(__instance.itemWorldData);
|
||||
if ((double)Utils.FastAbs(__instance.position.y - __instance.prevPos.y) < 0.10000000149011612)
|
||||
{
|
||||
++__instance.onGroundCounter;
|
||||
if (__instance.onGroundCounter > 10)
|
||||
__instance.onGround = true;
|
||||
}
|
||||
if (__instance.isPhysicsMaster && !SingletonMonoBehaviour<ConnectionManager>.Instance.IsServer && (__instance.ticksExisted & 1) != 0)
|
||||
__instance.PhysicsMasterSendToServer(__instance.transform);
|
||||
__instance.checkGravitySetting(__instance.isPhysicsMaster);
|
||||
if (__instance.isEntityRemote)
|
||||
return false;
|
||||
if (!(bool)(UnityEngine.Object)__instance.itemTransform)
|
||||
__instance.lifetime = 0.0f;
|
||||
__instance.lifetime -= 0.05f;
|
||||
if ((double)__instance.lifetime <= 0.0)
|
||||
__instance.SetDead();
|
||||
if (__instance.itemClass != null && __instance.itemClass.IsEatDistraction && __instance.distractionLifetime > 0 && __instance.distractionEatTicks <= 0)
|
||||
__instance.SetDead();
|
||||
if ((double)__instance.transform.position.y + (double)Origin.position.y < 0.0)
|
||||
__instance.SetDead();
|
||||
if (__instance.IsDead())
|
||||
return false;
|
||||
__instance.tickDistraction();
|
||||
|
||||
if (__instance.lootContainer != null && __instance.deathUpdateTime > 0)
|
||||
{
|
||||
bool flag = GameManager.Instance.GetEntityIDForLockedTileEntity((TileEntity)__instance.lootContainer) != -1;
|
||||
if (!__instance.bRemoved && !__instance.lootContainer.IsUserAccessing() && !flag && (__instance.lootContainer.bTouched && __instance.lootContainer.IsEmpty() || __instance.deathUpdateTime >= __instance.timeStayAfterDeath - 1))
|
||||
__instance.removeBackpack();
|
||||
}
|
||||
++__instance.deathUpdateTime;
|
||||
if (__instance.world.IsRemote() || !__instance.forceInventoryCreate && __instance.lootContainer != null)
|
||||
return false;
|
||||
__instance.lootContainer = new TileEntityLootContainer((Chunk)null);
|
||||
__instance.lootContainer.bTouched = false;
|
||||
__instance.lootContainer.entityId = __instance.entityId;
|
||||
__instance.lootContainer.lootListName = __instance.GetLootList();
|
||||
__instance.lootContainer.SetContainerSize(LootContainer.GetLootContainer(__instance.lootContainer.lootListName).size, true);
|
||||
if (__instance.isInventory != null)
|
||||
{
|
||||
__instance.lootContainer.bTouched = false;
|
||||
Log.Out("EntityLootContainerPatches-OnUpdateEntity CREATING IVENTORY");
|
||||
for (int index = 0; index < __instance.isInventory.Length; ++index)
|
||||
{
|
||||
if (!__instance.isInventory[index].IsEmpty())
|
||||
__instance.lootContainer.AddItem(__instance.isInventory[index]);
|
||||
}
|
||||
}
|
||||
__instance.lootContainer.SetModified();
|
||||
__instance.forceInventoryCreate = false;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user