Upload from upload_mods.ps1
This commit is contained in:
60
Harmony/Inactive/Harmony_MultiBlockManager.cs
Normal file
60
Harmony/Inactive/Harmony_MultiBlockManager.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
namespace Harmony.MultiBlockManagerPatches
|
||||
{
|
||||
[HarmonyPatch(typeof(MultiBlockManager))]
|
||||
[HarmonyPatch("TryRegisterPOIMultiBlock")]
|
||||
public class TryRegisterPOIMultiBlockPatch
|
||||
{
|
||||
public static bool Prefix(MultiBlockManager __instance, ref bool __result, Vector3i parentWorldPos, BlockValue blockValue)
|
||||
{
|
||||
if (!__instance.CheckFeatures(MultiBlockManager.FeatureFlags.POIMBTracking))
|
||||
return false;
|
||||
using (MultiBlockManager.s_MultiBlockManagerTryAddPOIMultiBlock.Auto())
|
||||
{
|
||||
lock (__instance.lockObj)
|
||||
{
|
||||
MultiBlockManager.TrackedBlockData trackedBlockData1;
|
||||
if (__instance.trackedDataMap.CrossChunkMultiBlocks.TryGetValue(parentWorldPos, out trackedBlockData1))
|
||||
{
|
||||
UnityEngine.Debug.LogError((object)(string.Format("[MultiBlockManager] Failed to register POI multiblock at {0} due to previously registered CrossChunk data.", (object)parentWorldPos) + string.Format("\nOld value: {0} ", (object)trackedBlockData1.rawData) + string.Format("\nNew value: {0}", (object)blockValue.rawData)));
|
||||
__result = false;
|
||||
return false;
|
||||
}
|
||||
MultiBlockManager.TrackedBlockData trackedBlockData2;
|
||||
if (__instance.trackedDataMap.PoiMultiBlocks.TryGetValue(parentWorldPos, out trackedBlockData2))
|
||||
{
|
||||
UnityEngine.Debug.LogError((object)(string.Format("[MultiBlockManager] Duplicate multiblock placement at {0}. New value will not be applied.", (object)parentWorldPos) + string.Format("\nOld value: {0} ", (object)trackedBlockData2.rawData) + string.Format("\nNew value: {0}", (object)blockValue.rawData)));
|
||||
__result = false;
|
||||
return false;
|
||||
}
|
||||
if (blockValue.ischild)
|
||||
{
|
||||
UnityEngine.Debug.LogError((object)"[MultiBlockManager] TryAddPOIMultiBlock failed: target block is not a parent: " + blockValue.Block.blockName);
|
||||
__result = false;
|
||||
return false;
|
||||
}
|
||||
RectInt flatChunkBounds;
|
||||
if (!blockValue.Block.isMultiBlock)
|
||||
{
|
||||
flatChunkBounds = new RectInt((UnityEngine.Vector2Int)World.toChunkXZ(parentWorldPos), UnityEngine.Vector2Int.zero);
|
||||
}
|
||||
else
|
||||
{
|
||||
Vector3i minPos;
|
||||
Vector3i maxPos;
|
||||
MultiBlockManager.GetMinMaxWorldPositions(parentWorldPos, blockValue, out minPos, out maxPos);
|
||||
Vector2i chunkXz1 = World.toChunkXZ(minPos);
|
||||
Vector2i chunkXz2 = World.toChunkXZ(maxPos);
|
||||
flatChunkBounds = new RectInt((UnityEngine.Vector2Int)chunkXz1, (UnityEngine.Vector2Int)(chunkXz2 - chunkXz1));
|
||||
}
|
||||
__instance.trackedDataMap.AddOrMergeTrackedData(parentWorldPos, blockValue.rawData, flatChunkBounds, MultiBlockManager.TrackingTypeFlags.PoiMultiBlock);
|
||||
__instance.isDirty = true;
|
||||
__instance.UpdateProfilerCounters();
|
||||
__result = true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user