private void EntityGlowingAgent_OnTaskStarted(IAiTask task) { if (task is AiTaskSeekEntity) { WatchedAttributes.SetFloat("aggroTime", 10); } }
public EntityBlockFalling(Block block, BlockEntity blockEntity, BlockPos initialPos, AssetLocation fallSound, float impactDamageMul, bool canFallSideways, float dustIntensity) { this.impactDamageMul = impactDamageMul; this.fallSound = fallSound; this.canFallSideways = canFallSideways; this.dustIntensity = dustIntensity; WatchedAttributes.SetBool("canFallSideways", canFallSideways); WatchedAttributes.SetFloat("dustIntensity", dustIntensity); if (fallSound != null) { WatchedAttributes.SetString("fallSound", fallSound.ToShortString()); } this.Code = new AssetLocation("blockfalling"); this.blockCode = block.Code; this.removedBlockentity = blockEntity; this.initialPos = initialPos.Copy(); // Must have a Copy() here! ServerPos.SetPos(initialPos); ServerPos.X += 0.5; ServerPos.Z += 0.5; Pos.SetFrom(ServerPos); }
public override void Die(EnumDespawnReason reason = EnumDespawnReason.Death, DamageSource damageSourceForDeath = null) { base.Die(reason, damageSourceForDeath); DeathReason = damageSourceForDeath; DespawnReason = null; DeadNotify = true; TryStopHandAction(true, EnumItemUseCancelReason.Death); TryUnmount(); WatchedAttributes.SetFloat("intoxication", 0); // Execute this one frame later so that in case right after this method some other code still returns an item (e.g. BlockMeal), it is also ditched Api.Event.EnqueueMainThreadTask(() => { if (Properties.Server?.Attributes?.GetBool("keepContents", false) != true) { World.PlayerByUid(PlayerUID).InventoryManager.OnDeath(); } if (Properties.Server?.Attributes?.GetBool("dropArmorOnDeath", false) == true) { foreach (var slot in GearInventory) { if (slot.Empty) { continue; } if (slot.Itemstack.ItemAttributes?["protectionModifiers"].Exists == true) { Api.World.SpawnItemEntity(slot.Itemstack, ServerPos.XYZ); slot.Itemstack = null; slot.MarkDirty(); } } } }, "dropinventoryondeath"); }